关于tornado websocket的使用

现在的情况是这样,tornado的7999端口同时运行着两个app,一个http协议,一个websocket协议,localhost上均正常,但是在服务器上,websocket无法握手成功,直接timeout,各位有相关的经验吗?

前端代码:

    //初始化weosocket 
    initWebSocket(){
      if(this.websocket === null || this.websocket === undefined){
        const config = require('../../../config');
        const endpoint = location.hostname + ":" + config.dev.endport;
        const wsuri = 'ws://'+ endpoint + "/connect"
        this.websocket = new WebSocket(wsuri);
        this.websocket.onopen = this.websocketonopen;
        this.websocket.onerror = this.websocketonerror;
        this.websocket.onmessage = this.websocketonmessage;
        this.websocket.onclose = this.websocketclose;
      }
   },
    websocketonopen() {
      console.log("WebSocket连接成功");
   },

后端代码:

if __name__ == '__main__':
    tornado.options.define("port", default=7999, help="run on the given port", type=int)
    tornado.options.parse_command_line(sys.argv)

    flask_wsgi_app = tornado.wsgi.WSGIContainer(app)

    mixed_app = tornado.web.Application([
        ('/connect', ConnectionHandler),
        ('.*', tornado.web.FallbackHandler, dict(fallback=flask_wsgi_app))
    ])

    http_server = tornado.httpserver.HTTPServer(mixed_app)
    http_server.listen(tornado.options.options.port)
    tornado.ioloop.IOLoop.instance().start()
阅读 2.8k
2 个回答

“服务器”环境,连接不一定是直接到你的 tornado ,前面可能有其它设备,这些设备不一定支持 websocket 。
先确认下环境问题吧。

如果你使用了nginx之类的转发工具,他们很可能也要进行专项配置的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题