我正在实现一个如下工作的服务器:
- AddUser(content) - 将用户添加到服务器,使用用户ID进行响应
- OnRegister(UserID,Connection) - 将服务器的客户端注册到特定的UserID
- OnUserChange(UserID) - 通知已注册的客户(通过他们注册的连接)(普通客户无法访问)
所以例如:
第一个部分:
- 客户端添加用户(使用AddUser)
- 服务器生成用户ID“54”,将注册任务排队等待以后(因为注册过程很慢),然后用用户ID进行响应
第二部分:
- 客户注册用户ID:'54'和连接“127.0.0.1:4334”(它的发送方式尚未定义)
- 客户端侦听127.0.0.1:4334(对于服务器的响应)
- 服务器将用户ID注册到客户端的连接(同时它可以获得更多请求)
- 通过异步的其他套接字向服务器通知用户状态更改
- 服务器向所有已注册的客户端发送响应(通知状态更改)
环境是Linux,延迟应该很小,数据传输大小并不重要。
问题是这个特定例程的最佳方法是什么?
我已经考虑了三种方法:
- 使用基于连接的反应器(当每个连接映射到给定用户ID,但“用户更改通知”的连接除外)
- 为客户端实现Rest API(使用flask)并为用户更改实现不同的通知
- 使用基于连接到一组用户的频道的Pub-Sub模式(因此客户端首先发布它所订阅的用户,服务器通过这些用户ID响应(发布)到客户端)
无论如何,我很高兴听到你对此的建议,也许是一个更好的方法来解决这个问题。