[Python] [Tornado] Можно ли использовать несколько веб-сокетов с разными портами и сообщениями в одной программе на Python? - PullRequest
0 голосов
/ 28 января 2019

Я новичок в Python.У меня сейчас есть проект, который использует Raspberry Pi для подключения к локальной сети, веб-сервера и мобильных приложений через веб-сокет.Оба они являются интерактивными.Теперь я могу общаться с каждым из них отдельно с помощью 3 разных программ.Но я сталкиваюсь с некоторыми проблемами, когда хочу интегрировать их в 1.

. Я прочитал несколько постов здесь и обнаружил, что во всех ответах предлагается использовать список для хранения каждой веб-сокета, и все они отправляют одно и то же сообщение.,Можно ли отправить другое сообщение?Может быть, что-то это

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()

Но кажется, что веб-сокет. init нуждается в запросе параметра.Что это?

1 Ответ

0 голосов
/ 28 января 2019

Можно ли отправить другое сообщение Просто переберите список сохраненных веб-сокетов и отправьте другое сообщение, просто так.

init нуждается в параметре request Tornado при каждом входящем запросе создает экземпляр обработчика запроса, и запрос init передается для привязки обработчика к запросу.Когда вы переопределяете метод init в своем обработчике, вы должны следовать интерфейсу метода родителя .Не беспокойтесь о значении аргумента запроса, торнадо передаст его вам.

...