并发:等到公共代码块完成
Concurrency: Wait until common block of code is done
我正在编写一个多线程服务器,需要处理客户端请求并在完成后 return 将它们返回给客户端。
我有一个并发客户端连接对象列表,它将有效负载传递到一个公共队列。通过队列后,负载由服务器处理并生成响应。
我的问题是我不知道如何通知客户端服务器已完成处理。
这是处理客户端负载的线程,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
}
评论部分是我遇到问题的地方。我不知道如何实现客户端线程将等待直到请求被处理的机制,一旦完成,我不知道如何将回复发送回客户端。
我花了很多时间研究,查看了 consumer/producer 问题,wait/notify 机制等,但似乎没有什么与这个特定问题相似。
如有任何帮助,我们将不胜感激。
您需要在 payloads
中的有效负载旁边存储客户端连接信息。
使用两个字段创建 class。其中一个将是您的有效载荷,另一个是允许您识别您的客户端的东西。
在您的 // SEND REPLY BACCK TO THE CLIENT
中发送回复。无需等待 /// Sleep until the server is done doing its logic with the payload
在不知道您与客户沟通的方式的情况下,我无法给您更好的答案。
如果您使用套接字 "something that allow you to identify your client" 将是套接字实例。
其他方法 将使用 SynchronousQueue
。
您在 // SEND REPLY BACCK TO THE CLIENT
中输入您的回复。
在 /// Sleep until the server is done doing its logic with the payload
中你接受响应(方法将阻塞直到响应被放入缓冲区)。
以与之前方法相同的方式传递带有有效负载的缓冲区。
我正在编写一个多线程服务器,需要处理客户端请求并在完成后 return 将它们返回给客户端。
我有一个并发客户端连接对象列表,它将有效负载传递到一个公共队列。通过队列后,负载由服务器处理并生成响应。
我的问题是我不知道如何通知客户端服务器已完成处理。
这是处理客户端负载的线程,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
}
评论部分是我遇到问题的地方。我不知道如何实现客户端线程将等待直到请求被处理的机制,一旦完成,我不知道如何将回复发送回客户端。
我花了很多时间研究,查看了 consumer/producer 问题,wait/notify 机制等,但似乎没有什么与这个特定问题相似。
如有任何帮助,我们将不胜感激。
您需要在 payloads
中的有效负载旁边存储客户端连接信息。
使用两个字段创建 class。其中一个将是您的有效载荷,另一个是允许您识别您的客户端的东西。
在您的 // SEND REPLY BACCK TO THE CLIENT
中发送回复。无需等待 /// Sleep until the server is done doing its logic with the payload
在不知道您与客户沟通的方式的情况下,我无法给您更好的答案。
如果您使用套接字 "something that allow you to identify your client" 将是套接字实例。
其他方法 将使用 SynchronousQueue
。
您在 // SEND REPLY BACCK TO THE CLIENT
中输入您的回复。
在 /// Sleep until the server is done doing its logic with the payload
中你接受响应(方法将阻塞直到响应被放入缓冲区)。
以与之前方法相同的方式传递带有有效负载的缓冲区。