我一直在尝试使用Autobahn / Tiwsted和Python 2.7整合这个特定的用例:
websocket服务器侦听潜在客户端进行连接。这些客户端发送订阅消息及其ID,然后websockets根据其ID 为特定内容提供服务。
例如,我只是在连接时将其ID返回给相应的客户端,并且我维护了一个在工厂中连接的客户端列表。
然而,在websocket服务器的onMessage()方法中,最奇怪的事情发生了。该方法是阻塞的,因此,当1000个客户端发送保持活动消息并且服务器需要回答所有这些消息时,使websocket崩溃。
示例:
class MyServerProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("Client connecting: {0}".format(request.peer))
def onOpen(self):
print("WebSocket connection open.")
def onMessage(self, payload, isBinary):
time.sleep(20)
if "ID" in msg_json:
self.sendMessage("Your ID is : %s" % msg_json['ID'])
def onClose(self, wasClean, code, reason):
print("WebSocket connection closed: {0}".format(reason))
self.factory.unregister(self)
使用此代码,如果多个客户端尝试连接,服务器将等待睡眠结束,第一个客户端应答第二个等等...
如何使此方法异步?
我当然可以使用一个队列和几个消费者线程,但我认为这不会是扭曲/高速公路的做事方式。
非常感谢