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

时间:2013-12-25 17:06:16

标签: websocket flask gevent gunicorn flask-sockets

我写了一个小应用程序,使用烧瓶插座使用WebSockets。我目前正在直接从gunicorn服务(使用来自烧瓶插座的gevent工作者),没有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'>

我想也许它与代理服务器有关,中间弄乱了Web套接字标题或者其他东西,所以我试图在客户端将JS代码更改为'wss://',但那并不是'完全没有工作(没有客户可以建立连接)。

我会对任何可以向我提供任何想法的人表示感谢。

1 个答案:

答案 0 :(得分:1)

这是3G运营商的常见问题(至少在欧洲)。

我建议您尝试在80以外的其他端口上运行您的网络服务器,如果这是某个已知服务的端口(例如443),那就更好了