如何将webockets和处理程序添加到正在运行的龙卷风服务器?

时间:2017-07-10 09:37:16

标签: websocket request add tornado dynamically-generated

我正在尝试构建一个龙卷风应用程序,客户可以通过请求通信器websocket来注册自己。

当通信器收到创建新处理程序的请求时,应将websocket添加到服务器。新的websocket是ClientWebSocketHandler的一个内容。

如何正确使用函数add_handlers()。 网络服务器如何获得有关新连接的信息? 我在这里缺少什么想法? 动态创建更多处理程序和websockets是否有标准方法?

class Communicator(tornado.websocket.WebSocketHandler):
    def initialize(self):
        print('communicator initialized')
    def open(self):
        print('communicator ready to receive messages')
    def on_message(self, msg):
        print('msg received: ' + msg)
        self.create_socket()
    def on_close(self):
        print('communicator closed')
    def create_socket(self):
        self.application.add_handlers(
        host_pattern = r'/',
        host_handlers = [
            (r'/clients/123', ClientWebsocketHandler),
        ]
    )

class Application(tornado.web.Application):
def __init__(self):
    settings = SWIFT_SERVER_SETTINGS
    handlers = [
        (r'/', IndexPageHandler),
        (r'/', tornado.web.StaticFileHandler, dict(path=settings['static_path'])),
        # (r'/clients/123', ClientWebsocketHandler),
        (r'/com', Communicator),
    ]
    tornado.web.Application.__init__(self, handlers, **settings)

1 个答案:

答案 0 :(得分:0)

您不需要该功能,请将您的代码更改为此

clients=[]
class Communicator(websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True

    def open(self):
         clients.append(self)
    def on_message(self, message):
          print self,message
          #return message
          self.write_message(message)
    def on_close(self):
          clients.remove(self)

我将客户端对象添加到全局变量中以后或在另一个函数中,您可以搜索该对象并向该客户端写入消息。