Подождите, пока все клиенты отправят данные, прежде чем отвечать в scalaPB

#asynchronous #server #protocol-buffers #grpc #scalapb

Вопрос:

Моему серверу требуются входные данные от нескольких клиентов, прежде чем отвечать на каждый из них, так как все входные данные зависят от другого. Поэтому я попытался использовать await , Future , и Promise , но мне не повезло.

В этом примере только последний подключившийся клиент получает ответ, в то время как остальные ждут бесконечно. Это пример кода, так как в этом примере нет причин ждать, пока все клиенты отправят данные.

Сервер

 var workerCount = 0; val numOfWorkers = 3;  private class GreeterImpl extends GreeterGrpc.Greeter {  override def assignID(req: GreeterRequest) = {  workerCount  = 1;  val reply = ID(id = workerCount)   val waitForAllToConnect: Future[String] = Future {  while(workerCount != numOfWorkers){  // do nothing  }  "Success"  }   Await.ready(waitForAllToConnect, Duration.Inf)  Future.successful(reply)  } }  

Клиент

 var id = 0;  def greet(greeting: String): Unit = {  val request = GreeterRequest(greeting = greeting)  val response = blockingStub.assignID(request)  id = response.id; }  

.файл proto

 syntax = "proto3";  package protoGreet;  service Greeter {  rpc assignID(GreeterRequest) returns (ID) {} }  message GreeterRequest {  string greeting = 1; }  message ID {  int32 id = 1; }