0

我的服务器需要来自多个客户端的输入,然后才能响应每个客户端,因为所有输入都依赖于另一个。所以我尝试使用await,FuturePromise,但我没有运气。

在这个例子中,只有最后一个连接的客户端得到响应,而其余的则无限等待。这是示例代码,因为在此示例中没有理由等待所有客户端发送数据。

服务器

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;
}
4

0 回答 0