我正在尝试使用 websocket 编写客户端/服务器应用程序。 我正在考虑使用高速公路网络插座作为我的通信媒介。 客户端将向服务器发送命令以执行任务,然后等待来自服务器的一系列进度响应。 在服务器中,从客户端收到命令后,我执行一系列任务,然后向客户端调用 self.sendMessage ("完成百分比")%(百分比)。 我遇到的问题是 sendMessage 似乎缓冲了所有消息,然后在最后一次发送了所有消息。 关于如何解决这个问题的任何想法? 以下是来自websocket/example/echo/server.py的代码片段:
import sys
import time
from twisted.internet import reactor
from twisted.python import log
from twisted.web.server import Site
from twisted.web.static import File
from autobahn.websocket import WebSocketServerFactory,
WebSocketServerProtocol,
listenWS
class EchoServerProtocol(WebSocketServerProtocol):
def onMessage(self, msg, binary):
self.sendMessage("server respond message 1", binary)
time.sleep (2)
self.sendMessage("server response message 2", binary)
time.sleep (2)
self.sendMessage("server response message 3", binary)
我希望客户端每 2 秒收到一条来自服务器的消息,而不是一次获取所有三条消息。
time.sleep
将阻止扭曲反应堆。这(几乎)从来都不是一个好主意。Twisted reactor.callLater
以非阻塞的方式延迟。
您可以在此处查看示例,以确保高速公路立即发送消息。
我和你有同样的问题,在阅读了特定的websocket协议之后,我有一个解决方案:
self.sendMessage(msg, binary, fragmentSize=len(msg))
来自网络套接字协议 RFC 6455
分段的主要目的是允许发送消息 当消息启动时大小未知,而不必 缓冲该消息。如果消息无法分段,则 端点必须缓冲整个消息,以便其长度可以 在发送第一个字节之前计数。对于碎片,一个 服务器或中介可以选择合理大小的缓冲区,并且当 缓冲区已满,向网络写入片段。