我是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 需要一个参数请求。那是什么?
答案 0 :(得分:1)
是否可以发送不同的消息只需遍历已存储的websocket列表并发送不同的消息即可,就这么简单。
init需要一个参数请求龙卷风在每个传入请求上创建一个请求处理程序的实例,并将请求传递给init以将处理程序绑定到请求。当您在处理程序中覆盖init方法时,应遵循parent's method interface。不用担心请求参数的值,龙卷风会为您传递。