2013-03-05 73 views
0

我有一个服务从多个客户端获取请求,并在某些处理向客户端发送响应之后。我使用ThreadPoolExecutor(threadExecuterClient)来处理客户端请求,并将它们放在BlockingQueue(requestQueue)中。许多客户端可以发送并发请求。我有另一个ThreadPoolExecutor(threadExecuterServer)处理requestQueue中的请求。这个处理过程基本上是把这个请求发送到服务器并得到响应。处理完成后,我需要将该响应发送给发出请求的客户端。我很难跟踪哪个客户提出了哪个请求。我基本上需要找到一种方法将客户端请求映射到处理结果。该服务将像一个网关。Java对许多线程的许多线程关系

任何想法来处理这个问题表示赞赏。

谢谢

+1

您可以在每个请求中附加客户端ID,并且该请求会像threadExecuterServer一样接收。在执行请求时,请求可以被分割以获取客户端做出的实际请求..并且在处理请求之后将客户端ID重新附加到响应代码中。IMO – 2013-03-05 17:40:43

+0

抱歉,您正在寻找一种跟踪工作的方式?一个简单的记录器说明每个执行的处理(请求接受,通过网关处理,响应发送)的请求ID是不够的? – devlearn 2013-03-05 17:42:23

+0

@VishalK我的第一个直觉就像你的直觉。但是,仅通过附加ID来处理请求就太复杂了。服务器线程始终处于活动状态,并且它们可以发送请求,因为队列中有更多的请求,而无需等待先前请求的响应。对于客户端线程,每个连接创建一个线程,客户端可以使用相同的连接发送多个请求,直到客户端关闭连接。对于最后一部分,我不确定一个连接是否适合多个请求。我可以为每个请求使用一个唯一的连接。 – celik 2013-03-05 18:31:31

回答

0

我假设你的服务通过HTTP接受请求?接受您的服务请求并发回HTTP 202响应。此响应表示该请求已被接受进行处理。当您发送回复时,请发送位置标题以告诉客户端要调用哪个URL以确定您的请求的状态。客户端可以轮询该URL以获取状态和结果。

该URL应该包含每个请求的唯一ID。您的服务器可以跟踪它并在准备就绪时填充响应。

+0

其实HTTP并没有涉及这项服务。客户端,网关和服务器端都是Java应用程序。 – celik 2013-03-05 18:18:02

+0

客户端如何与服务器通信? – 2013-03-05 18:44:05

+0

客户端和网关之间以及网关和服务器之间有套接字连接。 – celik 2013-03-05 18:52:26