2017-01-13 17 views
1

この問題を解決するためにかなり読んだことがありますが、まだ固執しています。私の問題は、socket.ioクライアント側とflask_socket.ioサーバー側を使用してwebsocketハンドシェイクを完了しようとすることです。Websocketは101(フラスコsocket.io)の代わりにステータス200を返す

app = Flask(__name__) 
 
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT' 
 
socketio = SocketIO(app) 
 
socketio.run(app) 
 
...

を、私はクロムを指している場合、localhostに:

私が使用して私のローカルマシン上でフラスコの開発サーバを実行することができ5000を、私はオープニングにリンクされているボタンを押してくださいWebSocketはうまく動作し、クロムネットワークのタブにはステータスが表示されます101.

しかし、コードをリモートマシンにアップロードし、フラスコの開発サーバーを使用してポートを80に変更すると、

socketio.run(app,host='0.0.0.0',port=80)

のWebSocketハンドシェイクが動作を停止し、代わりにステータス200を与えます。

'WS?://example.com/socket.io/ EIO = 3 &輸送=のWebSocket & SID = cfb1949b243b42578fe422782a0db359' へのWebSocket接続に失敗しました:エラーのWebSocketハンドシェイク中:予期しない応答コード:200

すべてのwebsocketメッセージは、websocketフレーム内ではなく、xhrポーリングで送信されます。

私はこれについてgoogle上で見つけることができますが、成功なしのすべてのガイドに従ってきました。以前はnginxとgunicornを使用していましたが、nginxのconfを変更してwebsocketにアップグレードできるようにアドバイスしたが問題は解決しなかった。だから私はフラスコ開発サーバーを使用することに簡素化したが、私はまだ成功した握手を得ることができていない。

答えて

1

ここに投稿した同様の問題を発見した後、解決策を見つけましたhttps://nolanlawson.com/2013/05/31/web-sockets-with-socket-io-node-js-and-nginx-port-80-considered-harmful/#comment-85425

多くの公開Wi-Fiネットワークは、ポート80で実行されているときにウェブソケットをブロックします。しかし、しばしばポート443と8080はブロックされません。どのポートがこのウェブサイトからブロックされているかを知ることができます:http://websocketstest.com/。私はwebsocketのアドレスをexample.comからexample.com:8080に移動しました。

関連する問題