我的服务器需要来自多个客户端的输入,然后才能响应每个客户端,因为所有输入都依赖于另一个。所以我尝试使用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;
}