socket.ioとwebsocketの違いについて
node.jsにおけるsocket.ioとwebsocketの違いは何ですか?
node.jsにおけるsocket.ioとwebsocketの違いは何ですか?
どちらもサーバープッシュ型の技術ですか?
私が感じた唯一の違いは
1.socket.ioでは、イベント名を指定してメッセージを送受信することができました。
2.socket.ioの場合、サーバーからのメッセージはすべてのクライアントに届きますが、websocketの場合、同じようにすべての接続の配列を保持し、すべてのクライアントにメッセージを送るためにそれをループする必要がありました。
また。 なぜウェブインスペクター(Chrome/firebug/fiddlerなど)は、サーバーからのこれらのメッセージ(socket.io/websocketから)をキャッチできないのでしょうか?
これを明らかにしてください。
398
3
誤認識
WebSocketとSocket.IOに関しては、よくある誤解があります。
1.1. 最初の誤解は、Socket.IOを使う方がWebSocketを使うよりもはるかに簡単であるというものですが、実際にはそうではないようです。以下の例をご覧ください。
2.2. 2つ目の誤解は、WebSocketがブラウザで広くサポートされていないことです。詳細は以下を参照してください。
3.3.3つ目の誤解は、Socket.IOは古いブラウザではフォールバックとして接続をダウングレードするということです。実際には、ブラウザが古いことを想定して、サーバーへのAJAX接続を開始しますが、WebSocketをサポートするブラウザでは、いくつかのトラフィックが交換された後、後でアップグレードされます。詳細は以下を参照してください。
私の実験
WebSocketとSocket.IOの違いを示すために、npmモジュールを書きました。
これは、サーバーサイドとクライアントサイドのコードの簡単な例です。クライアントはWebSocketまたはSocket.IOを使ってサーバーに接続し、サーバーは1秒間隔で3つのメッセージを送信し、それらはクライアントによってDOMに追加されます。
サーバー側
WebSocketとSocket.IOを使ったサーバーサイドの例を、Express.jsのアプリで同じことをする場合と比較してみましょう。
WebSocketサーバ
Express.jsを使ったWebSocketサーバーの例です。
ソース: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js
ソケット.IOサーバー
Express.jsを使ったSocket.IOサーバーの例です。
ソース: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js
クライアント側
WebSocketとSocket.IOを使ったクライアントサイドの例を、ブラウザで同じことができるかどうか比較してみましょう。
WebSocketクライアント
バニラJavaScriptを使ったWebSocketクライアントの例。
ソース: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html
ソケット.IOクライアント
vanilla JavaScriptを使ったSocket.IOクライアントの例です。
ソース: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.html
ネットワークトラフィック
ネットワークトラフィックの違いを見るには、私のテストを実行することができます。私が得た結果は以下の通りです。
WebSocketの結果
2つのリクエスト、1.50KB、0.05秒
その2つのリクエストから
1.HTMLページ自体 2. WebSocketへの接続アップグレード
(接続アップグレードのリクエストは、101 Switching Protocolsのレスポンスで開発者ツール上で確認できます)
ソケット.IOの結果
6リクエスト、181.56KB、0.25秒
この6つのリクエストから
1.HTMLページそのもの 2.Socket.IOのJavaScript(180キロバイト) 最初の長いポーリングAJAXリクエスト 4. 2回目のロングポーリングAJAXリクエスト 3番目のロングポーリングAJAXリクエスト 6. WebSocketへの接続アップグレード
スクリーンショット
ローカルホストで得られたWebSocketの結果です。
私がローカルホストで得たSocket.IOの結果。
自分でテスト
クイックスタート
ブラウザで http://localhost:3001/ を開き、Shift+Ctrl+I で開発者ツールを開き、[ネットワーク] タブを開いて Ctrl+R でページをリロードすると、WebSocket バージョンのネットワーク トラフィックが表示されます。
ブラウザで http://localhost:3002/ を開き、開発者ツールを Shift+Ctrl+I で開き、「ネットワーク」タブを開いて Ctrl+R でページをリロードすると、Socket.IO バージョンのネットワークトラフィックが表示されます。
アンインストールするには
ブラウザの互換性
2016年6月現在、WebSocketは9以上のIEを含め、Opera Miniを除くすべてのブラウザで動作します。
2016年6月現在のCan I UseにおけるWebSocketのブラウザ互換性です。
[![Enter image description here][3]][3].
最新の情報は http://caniuse.com/websockets をご覧ください。
[3]: http://i.stack.imgur.com/igTKM.png
その利点は、2で述べたように、WebSocketの使用を単純化すること、そしておそらくより重要なのは、WebSocketがブラウザやサーバでサポートされていない場合に、他のプロトコルへのフェイルオーバーを提供することです。私は、WebSocketsがどのような環境で使えないかを熟知し、その制限を回避する能力がない限り、WebSocketsを直接使用することは避けます。
WebSocketとSocket.IOについては、こちらの記事が参考になります。
http://davidwalsh.name/websocket
ここでは、socket.ioを使うことに反対する意見を述べます。
フォールバックがあるという理由だけでsocket.ioを使うのは良いアイデアではないと思います。IE8はもう終わりにしましょう。
過去には、NodeJSの新しいバージョンでsocket.ioが壊れるケースがたくさんありました。 以下のリストで例を確認することができます... https://github.com/socketio/socket.io/issues?q=install+error
Androidアプリや、既存のアプリとの連携が必要なものを開発しに行く場合、おそらくWSをすぐに使っても問題ないと思いますが、socket.ioはそこそこ苦労するかもしれません...。
それに、Node.JSのWSモジュールは驚くほど簡単に使えます。