Я пишу многопоточный сервер, с которым нужно обрабатывать клиентские запросы и возвращать их обратно клиенту по завершении.Параллельность: Подождите, пока не будет выполнен общий код кода
У меня есть список объектов параллельных клиентских подключений, которые передают полезные нагрузки в общую очередь. После прохождения очереди, полезная нагрузка обрабатывается сервером и генерируются ответы.
Проблема заключается в том, что я понятия не имею, как уведомить клиента о завершении обработки сервера.
Это поток, который обрабатывает клиентскую полезную нагрузку, полезная нагрузка является 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
}
комментируемые биты, где у меня возникли проблемы. Я понятия не имею, как реализовать механизм, в котором клиентский поток будет ждать обработки запроса и, как только это произойдет, я не знаю, как отправить ответ клиенту.
Я потратил много времени на исследование, посмотрел на проблему потребителя/производителя, механизм ожидания/уведомления и т. Д., Но ничто не похоже на эту конкретную проблему.
Любая помощь была бы принята с благодарностью.
* «но ничто не похоже на эту конкретную проблему». * В соответствии с моим пониманием у вас есть экземпляр (сервер), который хранит задания и собирает результаты, в то время как многие клиенты тянут доступные задания и должны сообщать результаты , правильно? –
Правильно – Dragan
ОК, тогда вам нужно 2 метода в вашем объекте «диспетчер», метод 'take()', ваш код уже имеет и метод для возврата результатов, таких как 'report (JobResult jr)'. Клиенты получают работу, как у вас уже есть.когда они заканчивают, они сообщают о своем результате, и объект «диспетчер» должен соответствовать результатам с заданиями и делать то, что когда-либо он должен делать с результатом. –