[Python] [Tornado]是否可以在一个python程序中使用具有不同端口和消息的多个websocket?

时间:2019-01-28 10:03:40

标签: python websocket tornado

我是Python的新手。我现在有一个项目,该项目使用树莓派pi通过websocket连接到本地Web,Web服务器和移动应用程序。他们都是互动的。现在,我可以使用3个不同的程序分别与它们通信。但是当我想将它们集成到1中时会遇到一些问题。

我在这里阅读了许多帖子,发现所有答案都建议使用列表来存储每个websocket,并且所有这些都发送相同的消息。是否可以发送其他消息?也许是这样

import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler_web(tornado.websocket.WebSocketHandler):
    def __init__(self, application, **kwargs):
        pass

    def open(self):
        # do something

    def on_message(self, msg):
        # do something

    def on_close(self):
        # do something

class WebSocketHandler_mobile(tornado.websocket.WebSocketHandler):
    def __init__(self, application, **kwargs):
        pass

    def open(self):
        # do something

    def on_message(self, msg):
        # do something

    def on_close(self):
        # do something

class WebSocketHandler_server(tornado.websocket.WebSocketHandler):
    def __init__(self, application, **kwargs):
        pass

    def open(self):
        # do something

    def on_message(self, msg):
        # do something

    def on_close(self):
        # do something

app_web    = tornado.web.Application([(r'/ws/', WebSocketHandler_web),])
app_mobile = tornado.web.Application([(r'/ws/', WebSocketHandler_mobile),])
app_server = tornado.web.Application([(r'/ws/', WebSocketHandler_server),])

def main_task():
    # do something
    if(mode == 1):
        webSocket_web.write_message("Mode 1")
    elif(mode == 2):
        webSocket_mobile.write_message("Mode 2")
    elif(mode == 3):
        webSocket_server.write_message("Mode 3")
    # do something

if __name__ == "__main__":
    app_web.listen(7777)
    app_mobile.listen(8888)
    app_server.listen(9999)
    webSocket_web    = WebSocketHandler_web(app_web)
    webSocket_mobile = WebSocketHandler_mobile(app_mobile)
    webSocket_server = WebSocketHandler_server(app_server)
    tornado.ioloop.PeriodicCallback(main_task,1000).start()
    tornado.ioloop.IOLoop.instance.start()

但是似乎websocket。 init 需要一个参数请求。那是什么?

1 个答案:

答案 0 :(得分:1)

是否可以发送不同的消息只需遍历已存储的websocket列表并发送不同的消息即可,就这么简单。

init需要一个参数请求龙卷风在每个传入请求上创建一个请求处理程序的实例,并将请求传递给init以将处理程序绑定到请求。当您在处理程序中覆盖init方法时,应遵循parent's method interface。不用担心请求参数的值,龙卷风会为您传递。