2014-07-25 38 views
0

我有一个Servlet从客户端获取请求,然后Servlet通过http请求/响应(每个服务器需要1秒响应)从5个不同的服务器收集数据并将数据发送回客户端。JSP Servlet多线程Qustion

问题在于客户端必须等待6秒才能响应时间太长。 因此,5个服务器的请求必须同时发送。

思路:

  1. 多线程在Servlet中,就像一个普通的Java应用程序。
  2. 为每个服务器(请求)提供一个自己的Servlet,以便1个主Servlet向5个收集Servlet指出“获取数据xy”,收集Servlet将数据发送到主Servlet并将主Servlet发送回客户端。

我担心的问题是,线程/ servlet从另一个请求获取响应,因为它的时间和IP相同。

如何解决这个问题?谢谢!

+0

“我担心的问题是,一个线程/ Servlet中的另一个请求得到respons,因为它的同一时间和同一个IP地址。” - 你能阐述这个 – coreJavare

回答

2

多线程在Servlet

可以使用ServletRequest#startAsync()方法把此请求转换成异步模式中,并初始化其与原始(展开)的ServletRequest和ServletResponse的对象AsyncContext。

阅读更多关于Servlet 3 0 final-spec - Section 2.3.3.3 - Asynchronous processing的地方详细解释。

AsyncContext的Servlet 3.0规范定义处理HTTP的标准方式请求异步


了解更多关于Executors.newFixedThreadPool()创建一个可重用不受限制的队列操作线程的固定数目的线程池。在任何时候,最多nThreads线程都将被激活处理任务。如果在所有线程处于活动状态时提交其他任务,则它们将在队列中等待,直到线程可用。

请查看ExecutorService以阅读更多关于它的示例代码。

Read more...

+0

你HABE一个小例子为了我?例如,我在doGet方法中:1. String a = method1(); 2.字符串b = method2();.我想处理1.和2. Async AG在同一时间 – user3876178

+0

找到它[这里](https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3) – Braj

+0

THX,但我没有得到它。在所有例子中,一个长时间运行的任务会被外包到一个新线程中并发送回客户端。但我有5个任务,我只想同时运行,并将所有数据收集在一个servlet中,然后处理并发送回客户端。 – user3876178