Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:设计事件驱动服务器的方法_Python_Sockets_Networking_Zeromq - Fatal编程技术网

Python:设计事件驱动服务器的方法

Python:设计事件驱动服务器的方法,python,sockets,networking,zeromq,Python,Sockets,Networking,Zeromq,我正在实现一个服务器,其工作原理如下: AddUser(content)-将用户添加到服务器,并使用用户ID进行响应 OnRegister(UserID,Connection)-将客户机注册到服务器的特定UserID OnUserChange(UserID)-通知已注册的客户机(通过他们注册的连接)(普通客户机不应访问) 例如: 第一部分: 客户端添加一个用户(使用AddUser) 服务器生成用户ID“54”,将注册任务排队等待以后执行(因为注册过程很慢),然后使用用户ID进行响应 第二

我正在实现一个服务器,其工作原理如下:

  • 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时,“用户更改通知”的连接除外)
  • 为客户端实现RESTAPI(使用flask),并为用户更改通知实现不同的功能
  • 使用基于连接到一组用户的通道的发布子模式(因此客户端首先发布它订阅的用户,服务器通过这些用户ID响应(发布)到客户端)
无论如何,我会很高兴听到你的建议,也许是更好的方法