Python:如何组合进程轮询和非阻塞WebSocket服务器?

2024-09-21 01:00:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个主意。编写一个基于WebSocket的RPC,根据下面的场景处理消息。在

  1. 客户端连接到WS(web套接字)服务器
  2. 客户机向WS-server发送消息
  3. WS-server将消息放入传入队列(可以是多处理队列或RabbitMQ队列)
  4. 进程池中的一个工作线程拾取消息进行处理
  5. 正在处理消息(可以非常快也可以非常慢-它与WS服务器无关)
  6. 消息处理后,处理结果被推送到输出队列
  7. WS-server从队列弹出结果并将其发送到客户端

注意:关键点在于,WS-server应该是非阻塞的,并且只负责:

  • 连接验收
  • 从客户端获取消息并将其放入传入队列
  • 从输出队列弹出消息并将其发送回客户端

注意2:以某种方式存储客户机标识符并将其与来自客户机的消息一起传递是一个好主意

注3:完全可以的是,由于消息的前后排队,简单消息处理的速度(例如,将消息作为输入,然后将其推回)应降低。目标目标是能够在池中使用与处理快速消息相同的代码样式运行处理器昂贵的操作(粗略的非实际示例:几个嵌套的“for”循环)。一、 e.从输入队列弹出消息和某种客户机标识符,对其进行处理(可能需要一段时间),然后将处理结果与客户机ID一起推送到输出队列。在

问题:

  • 在Tornadweb中,如果我有一个队列(多处理或Rabit),怎么可能 我让Tornado的IOLoop每当有新的 队列中的项目?你能帮我找到一些现有的吗 是否有实施?在
  • 这样的设计有没有现成的实现?(不一定是龙卷风)
  • 也许我应该使用另一种语言(而不是python)来实现这样的设计?在

致谢:

  • 建议使用REST和WSGI来实现任何目标都是不受欢迎的
  • 比如“这里有一个链接到我在google上找到的代码的链接。它有一些来自tornado和multiprocessing的进口产品,我不确定它能做什么,但是我有99%的把握它绝对是你所需要的“也不受欢迎”
  • 建议使用异步库而不是普通的阻塞库。。。:)

Tags: 代码服务器消息客户端目标客户机wsserver
1条回答
网友
1楼 · 发布于 2024-09-21 01:00:42

Tornado的IOLoop允许您通过文件描述符处理来自任何文件对象的事件,因此您可以尝试以下操作:

  • 通过multiprocessing.Pipe与每个worker进程连接
  • 为每个管道的父端调用^{}(使用连接的fileno()
  • 让工作人员在每次将内容放入输出队列时写入一些随机垃圾,不管这是不是任何MQ的multiprocessing.Queue。在
  • 在事件处理程序中处理来自工作者的答案

相关问题 更多 >

    热门问题