2

フラスコソケットを使用して WebSocket を使用する小さなアプリを作成しました。私は現在、小さな実験であるため、前もってnginxなどを使用せずに、gunicornから直接サイトを提供しています(フラスコソケットのgeventワーカーを使用)。アクセスポイントに接続した状態でスマートフォンからサイトにアクセスしようとすると、サイトは正常に動作します。一方、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 事業者 (少なくともヨーロッパ) ではよくある問題です。

Web サーバーを 80 以外のポートで実行することをお勧めします。それが既知のサービスのポート (例: 443) である場合は、より適切です。

于 2013-12-28T22:07:00.467 に答える