我如何在我的 websocket 龙卷风中获得动态网址?

Posted

技术标签:

【中文标题】我如何在我的 websocket 龙卷风中获得动态网址?【英文标题】:How i get a dynamic url in my websocket tornado? 【发布时间】:2018-07-27 14:27:19 【问题描述】:

如何在我的websocket中获取js传递的动态url,是否需要它通过参数传递给今天没有收到任何东西但将来会收到的pc.connect()类?

网络套接字:

class MyWebSocketHandler(websocket.WebSocketHandler):
    def allow_draft76(self):
        # for ios 5.0 Safari
        return True

    def check_origin(self, origin):
        return True

    def open(self, *args, **kwargs):
        self.application.pc.add_event_listener(self)
        print ("WebSocket opened")

    def on_close(self):
        print ("WebSocket closed")
        self.application.pc.remove_event_listener(self)

def main():
    parse_command_line()
    aplication = tornado.web.Application([
        (r'.*', MyWebSocketHandler)
    ])
    pc = PikaClient(io_loop)
    aplication.pc = pc
    aplication.pc.connect()
    aplication.listen(8081)
    io_loop.start()

if __name__ == '__main__':
    main()

html:

const websocket = new WebSocket('ws://192.168.99.100:8081/$this.$route.params.uri')

【问题讨论】:

How can I implement multiple URL parameters in a Tornado route?的可能重复 没有办法在main函数中获取路径信息吗?在他谈到在处理程序类中拾取的主题中 【参考方案1】:

在应用程序中,像这样定义路由:

(r'/(.*)', MyWebSocketHandler),

括号定义了一个捕获组,它将作为args[0] 传递给open()

还请注意,allow_draft76 方法已在 Tornado 4.0 中删除,因此不再有任何理由在您的处理程序中包含此方法。

【讨论】:

但是我如何在没有全局变量的情况下将 args[0] 放在我的类 PikaClient 中?我需要用这个参数构造我的 mq。 那么你需要在MyWebSocketHandler.open而不是main中创建你的PikaClient。

以上是关于我如何在我的 websocket 龙卷风中获得动态网址?的主要内容,如果未能解决你的问题,请参考以下文章

如何限制龙卷风 websocket 消息大小

托管龙卷风/websocket 应用程序

在HAproxy中,我的websocket连接在50秒后关闭。怎么改呢?

如何从本地机器公开龙卷风 websocket

完全停止线程龙卷风 WebSocket 服务器

龙卷风 websocket 服务器 - 连接队列