[Python][Tornado] 是不是可以在一个 python 程序中拥有多个不同端口和消息的 websocket?
Posted
技术标签:
【中文标题】[Python][Tornado] 是不是可以在一个 python 程序中拥有多个不同端口和消息的 websocket?【英文标题】:[Python][Tornado] Is it possible to have multi websocket with different port & message in one python program?[Python][Tornado] 是否可以在一个 python 程序中拥有多个不同端口和消息的 websocket? 【发布时间】:2019-01-28 10:03:40 【问题描述】:我是 Python 的新手。我现在有一个项目,它使用树莓派通过 websocket 连接到本地网络、网络服务器和移动应用程序。两者都是互动的。我现在可以使用 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 需要一个参数请求。那是什么?
【问题讨论】:
似乎在WebSocketHandler类***.com/questions/12479054/…987654321@之外发送消息必须使用列表 【参考方案1】:是否可以发送不同的消息只需遍历存储的 websocket 列表并发送不同的消息,就这么简单。
init 需要一个参数请求 Tornado 在每个传入请求上创建一个请求处理程序的实例,并将请求传递给 init 以将处理程序绑定到请求。当您在处理程序中覆盖 init 方法时,您应该遵循parent's method interface。不用担心请求参数的值,tornado 会为你传递。
【讨论】:
以上是关于[Python][Tornado] 是不是可以在一个 python 程序中拥有多个不同端口和消息的 websocket?的主要内容,如果未能解决你的问题,请参考以下文章
面面观 | 使用python tornado web进行开发