【问题标题】:How to allow ws:// instead of localhost:// for tornado如何允许 ws:// 而不是 localhost:// 龙卷风
【发布时间】:2023-10-25 03:20:01
【问题描述】:

我有以下基本的龙卷风应用程序:

import tornado.web

class IndexHandler(tornado.web.RequestHandler):
    """Regular HTTP handler to serve the ping page"""
    def get(self):
        self.write("OK")

if __name__ == "__main__":

    app = tornado.web.Application([
    (r"/", IndexHandler), 
    ])
    app.listen(8000)
    print 'Listening on 0.0.0.0:8000'
    tornado.ioloop.IOLoop.instance().start()

这将在"http://localhost:8000" 上运行。我如何让它运行并接受ws://localhost:8000 的连接?

【问题讨论】:

  • 您将需要一个 websocket 服务器,并且它将具有与普通 HTTP 不同的端点。
  • @KlausD。 ——你的意思是在 Tornado 中不能完成?可以在 python 中完成的示例应用程序是什么?
  • 可以在 Tornado 中完成。至少看看官方文档:tornadoweb.org/en/stable/websocket.html

标签: python sockets tornado


【解决方案1】:

tornado.web.RequestHandler 用于接受 HTTP 请求。对于 websockets,你需要使用tornado.websocket.WebSocketHandler


另外需要注意的是,您不能直接从浏览器访问 websocket url。也就是说,您不能在地址栏中键入ws://localhost:8000 并期望连接到websocket。这不是 websocket 的工作方式。

websocket 连接是升级连接。这意味着,您首先必须通过 HTTP 访问一个 url,然后使用 Javascript 升级到 websocket。

Mozilla Web Docs 上查看有关如何使用 Javascript 连接到 websocket 的示例。

【讨论】: