web-dev-qa-db-ja.com

Socket.ioが失敗しました:接続が確立される前にWebSocketが閉じられました

問題

Socket.ioを使用する私のTwitterストリーミングアプリは、IPアドレスとポートでサイトにアクセスすると問題なく動作しますが、ドメイン名を使用してサイトにアクセスすると、ライブストリーミングでエラーがスローされます。 ????

以下のリンクを試し、開発者ツールを開いてエラーを確認してください

ドメイン名を使用してサイトにアクセスする( http://sentiment-sweep.com

この形式に従う数百のソケットエラー:

_WebSocket connection to 
'ws://sentiment-sweep.com/socket.io/?EIO=3&transport=websocket&sid=guBmeCqsOr22CTsWAAC0' 
failed: WebSocket is closed before the connection is established.
_

IPとポートを使用してサイトにアクセスする( http://XXX.XX.XXX.XX:30

最初は上記のソケットエラーのいくつかですが、その後10〜15秒後にアプリが正常に動作し始めます

バックグラウンド

私はこれを数年前に作成しましたNode大学プロジェクトのアプリです。数年前に更新しました。更新し続けます。Socket.ioとTwitter APIを使用して、ライブツイートをストリーミングし、感情を計算し、D3を使用して結果を視覚的に表示します。ポート転送にNGINXを使用しています。

参考までに、これが私のgitリポジトリです: https://github.com/Lissy93/Twitter-sentiment-visualisation

最近、HTML/CSSに小さな変更を加え、いくつかの依存関係を更新しました。このとき、この奇妙なsocket.ioの問題が発生しました

これまでに試したこと

  • ポートの変更-違いなし
  • 接続するためのパラメータなしでio.connect();を使用します
  • CDNからではなくローカルにsocket.ioを含める
  • 私のサイトが非SSLであることと何か関係があるのでしょうか
  • ローカルで完全に機能し、APIバージョンよりも高速で遅延が少ない

以前にこれに似た問題を見た人はいますか?提案、コメント、回答はいただければ幸いです。事前に感謝いたします。

5
Alicia

解決策を見つけました、そしてそれは実際に簡単でした!私がこれに2日間行き詰っていたため、ここに回答を投稿して、同様の問題に直面している他のユーザーを支援します。

私の問題は 依存関係の更新 が原因でした。

Socket.io V 2.0.0には下位互換性がありません。

リリースノートによると:

新しい(V 2.0.0)メジャーリリースでは、いくつかのパフォーマンスが改善されていますが、リリースノートの最後に次のように記載されています。

次の理由により、このリリースには下位互換性がありません。

  • Engine.io-parserのutf-8エンコーディングに関連する重大な変更(socketio/engine.io-parser#81)
  • クライアントのソケットIDをサーバー側のIDと一致させるための更新(socketio/socket.io-client#1058)

自己署名証明書を使用している場合、rejectUnauthorizedはデフォルトでtrueになっていることに注意してください(socketio/engine.io-client#558)。

V2の完全なリリースノートは次のとおりです。 https://github.com/socketio/socket.io/releases/tag/2.0.

解決策はHTTPSを使用することです

ドキュメントに従って、アプリをhttpsにするか、独自のリクエストに署名します。簡単な修正として、socket.io V 1.7.0にダウングレードしましたが、完全に機能しますか????

5
Alicia