2

我编写了一个使用烧瓶套接字使用 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://”,但这不起作用all(没有客户端可以建立连接)。

我会感谢任何可以为我提供任何想法的人。

4

1 回答 1

1

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

我建议您尝试在与 80 不同的端口上运行您的网络服务器,如果那是某些已知服务的端口(例如 443)会更好

于 2013-12-28T22:07:00.467 回答