ソケットとWebSocketの違いは?


178

ソケット接続を使用して別のアプリケーションと通信する必要があるWebアプリを構築しています。これは私にとって新しい領域なので、ソケットwebsocketとは異なることを確認したい。概念的には似ているだけのようです。

最初はプロジェクトの基盤としてDjangoを使用する予定でしたが、上記にリンクしたSOの投稿では、websocketが不可能である(または少なくともdjango-websocketsのようなものでも信頼できない)ことがはっきりとわかります)優先するDjangoセットアップ(Apache with mod_wsgi)を使用します。それでも、サーバーのホスト名取得するだけの簡単な方法で、Pythonのソケットモジュールをさりげなくインポートする他の投稿を見つけました。

そう:

  • 本当に違うのですか?
  • 外部サーバーとのソケット接続の確立に依存するプロジェクトでDjangoを使用しない理由はありますか?

回答:


141

あなたの質問に答えるために。

  1. それらは(一般的に)同様のことを達成しますが、そうです、それら本当に異なります。WebSocketは通常、TCP / IP上で実行されるHTTPと同様のプロトコルを介してApplication Serverに接続するブラウザから実行されます。したがって、これらは主にサーバーへの永続的な接続を必要とするWebアプリケーション用です。一方、プレーンソケットはより強力で汎用的です。これらはTCP / IPで実行されますが、ブラウザやHTTPプロトコルに限定されません。それらはあらゆる種類の通信を実装するために使用できます。
  2. いいえ、理由はありません。

128
WebSocketはHTTPに似ていません。これらは、いくつかのフレーミングとHTTP互換のハンドシェイクを備えた通常のソケットです。HTTP互換のハンドシェイクは、Webサーバーが実行されているのと同じポートでWebSocket接続を許可するためです(そのため、Webサーバーは転送できます)が、接続が確立されると、Webサーバーはループしません。WebSocketsはブラウザクライアントに限定されません。ブラウザ以外のクライアントとサーバーの両方を備えたlibwebsocketを参照してください。
カナカ

14
OK。わかりました...この承認された回答は削除できないので、正しい情報で編集してください。ありがとう!
パブロサンタクルス

2
WebSocketクライアントを構築して、ブラウザの外で使用できます。websocketプロトコルはHTTP 1.1で、「websocket」への接続がアップグレードされています。
ロジャーF.ゲイ

2
@ハギーいや。小さなフレーミングがあります:tools.ietf.org/html/rfc6455#section-5(小さなメッセージの場合は2バイト)。
カナカ、2014

2
@NiCkNewmanそれはおそらく実際には別の良い質問です。フレーミングのオーバーヘッドは最小限であり、問​​題ではありません。MMOネットワーキング用のWebSocketsの問題は2つあります。クライアントサーバーのみであり、TCP(ストリームベース)です。MMOネットワーキングのパフォーマンスを高めるには、直接のピアツーピアネットワーキングとデータグラムも必要です(すべてのパケットを受信するよりも、一貫性のある低遅延が重要です)。良いニュースは、WebRTC DataChannelにこれらの両方のプロパティがあるため、ギャップを埋め始め、ブラウザーで完全なAAA MMOゲームができるようになることです。
カナカ

21

WebSocketは、実装にソケットを使用します。WebSocketは、接続の「ハンドシェイク」とメッセージの「フレーム」を定義する標準プロトコル(現在は最終呼び出し中ですが、まだ最終ではありません)に基づいています。双方はハンドシェイク手順を実行して相互に接続を受け入れ、標準のメッセージ形式(「フレーム」)を使用してメッセージをやり取りします。

インストールされたソフトウェアを使用して、マシン間で直接通信できるようにするフレームワークを開発しています。それはあなたの目的に合うかもしれません。必要に応じて、私のブログをフォローできます。http//highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html


11

通常のブラウザアプリケーションは純粋なTCPソケットを開けないため、WebSocket(またはFlashプラグインでサポートされている類似のプロトコルモジュールなど)を使用する必要があります。

Socket.IO利用可能なモジュールnode.jsは多くのことを助けることができますが、それ自体は純粋なWebSocketモジュールではないことに注意してください。

これは実際には、WebSocketやFlashソケットなど、他さまざまなネットワークプロトコルの上で実行できる、より一般的な通信モジュールです。

したがってSocket.IO、サーバー側で使用する場合は、クライアントコードとオブジェクトも使用する必要があります。メッセージプロトコルをエミュレートする必要があるWebSocketため、socket.ioサーバーへの生の接続を簡単に行うことはできません。


11

WebSocketは、HTTPと同様に、TCPプロトコルを介したもう1つのアプリケーションレベルプロトコルです。

以下に引用されたスニペット<Spring in Action 4>は、WebSocketをよりよく理解するのに役立つことを願っています。

最も単純な形式では、WebSocketは2つのアプリケーション間の通信チャネルにすぎません(必ずしもブラウザが関与している必要はありません)... WebSocket通信は、あらゆる種類のアプリケーション間で使用できますが、WebSocketの最も一般的な用途は、サーバーアプリケーションとブラウザーベースのアプリケーション。


2

質問(b)については、Websocketの仕様がまだ確定していないことに注意してください。W3Cによると:

実装者は、この仕様が安定していないことに注意する必要があります。

個人的には、私はWebsocketを今のところ使用するには非常に最先端であると考えています。私はおそらくそれらが1年かそこらで役立つと思うでしょう。


9年後の今はどうですか?
Venryx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.