如何解决如何获取所有已连接客户端的列表
这是我启动gRPC服务器的方法:
std::string server_address("0.0.0.0:50051");
ServerBuilder builder;
// Listen on the given address without any authentication mechanism.
builder.AddListeningPort(server_address,grpc::InsecureServerCredentials());
// Register "service_" as the instance through which we'll communicate with
// clients. In this case it corresponds to an *asynchronous* service.
builder.RegisterService(&service_);
// Get hold of the completion queue used for the asynchronous communication
// with the gRPC runtime.
cq_ = builder.AddCompletionQueue();
// Finally assemble the server.
server_ = builder.BuildAndStart();
std::cout << "Server listening on " << server_address << std::endl;
到目前为止一切顺利。我想将所有连接的客户端存储在std :: deque中。 但是,没有方法可以识别新连接。
一旦我能够存储活动客户端的列表,就可以创建诸如Broadcast
之类的函数,它将向所有连接的客户端发送数据。
为什么我需要所有连接的客户端?
- 我们假设以下情况。我在世界各地的许多地图上都有很多玩家。我只想更新当前在地图ID 1上的玩家。因此,在这种情况下,bidi-stream无法为我完全解决问题,因为它将向所有地图上的所有玩家发送信息。为了发送给特定的我需要区分它们。
所以我的问题是:
如何识别新连接并将客户的详细信息纳入双端队列?我应该在该双端队列中存储什么,以及以后如何才能仅将消息发送给特定客户端?
P.S。
经过更多的研究,我发现我可以为客户端制作元数据。并从客户端创建一个简单的一元调用,例如GetMyConnectionId
,服务器将返回连接ID。好的,这样服务器可以区分来自该客户端的请求,但问题仍然存在。现在如何确定我只能向哪些客户发送请求?有没有办法过滤与特定元数据密钥连接的客户端并将其仅发送给它们?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。