web-dev-qa-db-ja.com

ソケットとWebSocketの違いは?

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

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

そう:

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

質問に答えるため。

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

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

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

15
Roger F. Gay

通常のブラウザアプリケーションは純粋なTCPソケットを開くことができないため、WebSockets(またはsome同様のプロトコルモジュール、たとえばFlashプラグインでサポートされているプロトコルモジュール)を使用する必要があります。

Socket.IOnode.js で利用可能なモジュールは大いに役立ちますが、それはnotそれ自体が純粋なWebSocketモジュールであることに注意してください。

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

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

10
Alnitak

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

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

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

7
smwikipedia

あなたの質問(b)については、Websocketの仕様が最終決定されていないことに注意してください。 W3C によると:

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

個人的には、WebsocketはEdgeを出血させすぎて現在使用できないと考えています。私はおそらくそれらを1年かそこらで役に立つと思うでしょうが。

2
Phil Hunt

「WebSocket」という名前のせいにします。それらは多くの点で異なっています。彼らがした唯一の一般的なことは、両方ともネットワーク通信を行うことです。

pythonのsocketsはBSDソケット実装の単なるライブラリであり、TCP/IPに関連する接続を作成できます。 WebSocketは既存のHTTPプロトコルに基づいて構築され、HTTPで二重接続を確立する簡単な方法がないため、WebSocketプロトコルへの接続を「アップグレード」します。

0
Teng-Jing Wang