如何使用Autobahn创建异步流式websocket?

时间:2017-08-23 07:39:26

标签: python twisted autobahn

我一直在尝试使用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)

使用此代码,如果多个客户端尝试连接,服务器将等待睡眠结束,第一个客户端应答第二个等等...

如何使此方法异步?

我当然可以使用一个队列和几个消费者线程,但我认为这不会是扭曲/高速公路的做事方式。

非常感谢

0 个答案:

没有答案