【问题标题】:multi tornado websocket block one another多龙卷风 websocket 互相阻塞
【发布时间】:2018-10-24 07:57:15
【问题描述】:

所有。 在我的项目中,我建立了两个 websocket 连接。一个用于从服务器向客户端发送图片,另一个用于从客户端向服务器发送一些控制数据。现在我只使用一个客户端。

var ws2 = new WebSocket('ws://xx.xx.xx.xx:9002/control')
var ws1 = new WebSocket('ws://xx.xx.xx.xx:9002/data')
ws.binaryType = 'blob'
ws2.onopen =()=> console.log('ws2 connected.')

在服务器端,一旦 ws1 打开,它就会不断地向客户端发送数据。 q 是一个全局队列,我从中获取数据。这部分工作正常。 问题是我从客户端发送消息后,程序无法在ws2的函数中运行on_message(self, message)。

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

class myWebSocket(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True;

    def open(self):
    print "websocket1 open."
    while self.ws_connection is not None:
        print "send..."
        try:
            self.write_message(q.get(),True)
        except tornado.websocket.WebSocketClosedError:
            self.close()
    def on_message(self, message):
        print("websocket1 received message.")
        print message
    def on_close(self):
        print("websocket1 closed.")

class controlWebSocket(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True;
    def open(self):
        print "websocket2 open"

    def on_message(self, message):
        print("websocket2 received message.")
        print message

    def on_close(self):
        print("websocket2 closed.")

我确信客户端通过单击按钮成功发送控制数据。

<script>
    function test(){
    ws2.send("this is from ws2.")
    alert("home clicked.")
    }
</script>

我还发现,一旦ws1中的open函数停止,ws2就可以收到消息了。我不明白为什么ws1发送数据导致ws2无法接收数据。

我是 python 编程和 tornado websocket 的新手。任何人都可以帮助解决这个问题,非常感谢~!

【问题讨论】:

    标签: python multithreading websocket tornado


    【解决方案1】:

    Tornado 建立在 non-blocking concurrency 之上。这意味着您通常必须避免阻塞方法(或在线程池中运行它们)。 q.get() 是一种阻塞方法,因此 Tornado 在等待消息时无法运行任何其他方法。您可能应该将此队列替换为tornado.queues.Queue。

    【讨论】:

    • 感谢您的回复和解释。现在我明白了。非常感谢。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多