多龙卷风网窝块

2024-05-15 23:34:09 发布

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

全部。 在我的项目中,我构建了两个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的新手。任何人都可以在这个问题上提供帮助,非常感谢~!你知道吗


Tags: self客户端messagewsondeforiginopen
1条回答
网友
1楼 · 发布于 2024-05-15 23:34:09

龙卷风是建立在non-blocking concurrency之上的。这意味着您通常必须避免阻塞方法(或在线程池中运行它们)。q.get()是一个阻塞方法,所以在Tornado等待消息时,其他任何东西都不能运行。您可能应该用tornado.queues.Queue替换这个队列。你知道吗

相关问题 更多 >