我正在编写一个多线程服务器,需要处理客户端请求并在完成后将它们返回给客户端。
我有一个并发客户端连接对象列表,它将有效负载传递给公共队列。在完成队列之后,服务器处理有效负载并生成响应。
我遇到的问题是我不知道如何通知客户端服务器已经完成处理。
这是处理客户端有效负载的线程,payLoad是一个BlockingQueue,之前由客户端线程加载:
Thread messageHandling = new Thread() {
public void run(){
while(true){
try{
Object payLoad= payLoads.take();
// Do some handling
// SEND REPLY BACCK TO THE CLIENT
}
catch(InterruptedException e){ }
}
}
};
与此同时,在客户端,发生了以下情况:
{
...
payloads.add(payLoad)
/// Sleep until the server is done doing its logic with the payload
}
评论位是我遇到麻烦的地方。我不知道如何实现一种机制,客户端线程将等待处理请求,一旦它,我不知道如何将回复发送回客户端。
我花了很多时间研究,查看消费者/生产者问题,等待/通知机制等,但似乎没有任何类似于这个特定问题。
非常感谢任何帮助。
答案 0 :(得分:1)
您需要在payloads
。
创建包含两个字段的类。其中一个将是您的有效负载,另一个是允许您识别您的客户端。
在// SEND REPLY BACCK TO THE CLIENT
中发送回复。无需在/// Sleep until the server is done doing its logic with the payload
如果不知道您与客户沟通的方式,我无法给您更好的答案。
如果您使用套接字“允许您识别客户端的东西”将是套接字实例。
其他方法将使用SynchronousQueue
。
在// SEND REPLY BACCK TO THE CLIENT
中,您将回复录入其中。
在/// Sleep until the server is done doing its logic with the payload
中你接受响应(方法将阻塞,直到响应被放入缓冲区)。
使用与前一种方法相同的有效载荷缓冲区。