当通过烧瓶插座和gunicorn上的3G连接时,WebSocket连接失败

当通过烧瓶插座和gunicorn上的3G连接时,WebSocket连接失败,websocket,flask,gevent,gunicorn,flask-sockets,Websocket,Flask,Gevent,Gunicorn,Flask Sockets,我已经编写了一个小应用程序,它使用WebSocket和flask套接字。我目前直接从gunicorn(使用flask sockets的gevent worker)为该站点提供服务,前面没有nginx或任何东西,因为这只是一个小实验。当连接到接入点时,尝试在智能手机上访问该站点时,该站点工作正常。另一方面,当连接到3G时,站点被加载,但websocket连接失败 我在服务器日志中看到: Traceback (most recent call last): File "/usr/local/lib/

我已经编写了一个小应用程序,它使用WebSocket和flask套接字。我目前直接从gunicorn(使用flask sockets的gevent worker)为该站点提供服务,前面没有nginx或任何东西,因为这只是一个小实验。当连接到接入点时,尝试在智能手机上访问该站点时,该站点工作正常。另一方面,当连接到3G时,站点被加载,但websocket连接失败

我在服务器日志中看到:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 438, in handle_one_response
self.run_application()
File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 424, in run_application
self.result = self.application(self.environ, self.start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask_sockets.py", line 37, in __call__
environment = environ['wsgi.websocket']
KeyError: 'wsgi.websocket'
<PyWSGIServer fileno=5 address=192.168.1.50:80>: Failed to handle request:
  request = GET /clock_skew HTTP/1.1 from ('80.246.130.25', 36438)
  application = <Flask 'flask_client_id.client_id'>
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python2.7/dist packages/gevent/pywsgi.py”,第438行,在handle\u one\u响应中
self.run_应用程序()
文件“/usr/local/lib/python2.7/dist packages/gevent/pywsgi.py”,第424行,在run_应用程序中
self.result=self.application(self.environ、self.start\u响应)
文件“/usr/local/lib/python2.7/dist packages/flask/app.py”,第1836行,在调用中__
返回self.wsgi_应用程序(环境,启动响应)
文件“/usr/local/lib/python2.7/dist packages/flask\u sockets.py”,第37行,in\u调用__
environment=environ['wsgi.websocket']
KeyError:'wsgi.websocket'
:无法处理请求:
request=GET/clock_skew HTTP/1.1 from('80.246.130.25',36438)
应用程序=

我想它可能与中间的代理服务器在中间使用Web套接字头或某些东西有关,所以我试图将JS代码更改为“客户端上的WSS://'”,但这根本不起作用(没有客户端可以建立连接)。


我会向任何能为我提供这方面想法的人讨好。

这是3G运营商经常遇到的问题(至少在欧洲)

我建议您尝试在不同于80的端口上运行Web服务器,如果这是某个已知服务的端口(例如443),则效果更好