web-dev-qa-db-ja.com

TCP Webブラウザー(クライアント側)からのソケット接続を確立する方法は?

私はWebSocketsについて読みましたが、それらにはアプリケーション層プロトコルがあるため、純粋な「ソケット」ではないようです。 「ws:

Webブラウザーから純粋なソケット接続を行い、Webページを活性化する方法はありますか?

これが暗闇の中で私のランダムな刺しです

  • Javaによって提供されるアプレットソケット(Javaインストールが必要))
  • フラッシュが提供するフラッシュソケット(フラッシュがインストールされている必要があります)

しかし、HTML5については、ソケットでないのにWebSocketと呼ばれるのはなぜですか?

WebSocketプロトコルは、「ほとんど」ソケットであるほど実装が簡単ですか?

23
Hernán Eche

私はWebSocketについて読みましたが、それらの上にアプリケーション層プロトコルがあるため、それらは純粋な「ソケット」ではないようです。

[ほとんど]ソケットを実装するのが簡単なWebSocketプロトコルですか?

ブラウザから直接通常のソケット接続を許可することは、大きなリスクを招くため、決して起こりません。 WebSocketsは、ブラウザから取得したrawソケットにほぼ近いです。最初のWebSocketハンドシェイクはHTTPハンドシェイク(Webサーバーがプロキシ/ブリッジできるようにする)に似ており、CORSタイプのセキュリティを追加します。さらに、WebSocketは(raw TCPとしてストリーミングするのではなく)メッセージベースのトランスポートであり、これは各メッセージフレームで2バイトのヘッダーを使用して行われます。

フラッシュでも完全にraw TCP=接続を確立できません。フラッシュソケットもCORSセキュリティを追加しますが、インバンドハンドシェイクの代わりに、フラッシュソケット接続はターゲットサーバーのポート843に接続しますセキュリティポリシーファイルをリクエストします。

Webページを活性化するために、Webブラウザーから純粋なソケット接続を行う方法はありますか?

はい。Webソケット対応のブラウザがwebsockify経由でTCPソケットに直接接続できるようにするmy - websockify ブリッジ/プロキシを使用できます。

しかし、HTML5については、ソケットでないのにWebSocketと呼ばれるのはなぜですか?

WebSocketは、TCPソケット上に構築されたトランスポートです。ハンドシェイク後のオーバーヘッドはごくわずかです(通常は2バイトのヘッダーのみ))。

51
kanaka

二次的な質問に対するカナカの回答を改善することはできません。この質問は1歳です。しかし、主な質問については、Is there any way of doing a pure socket connection from a web browser, to enliven webpages?Java/JavaScript Socket Bridge と呼ばれるプロジェクトがあります。これは、あなた(またはGoogle検索でこのページにアクセスした人)が探しているものかもしれません。他の人が述べたことに対するこのメソッドの利点は、クライアント側またはサーバー側のサービスを実行する必要がないことです。したがって、たとえば、IRCクライアントを純粋にJavaScriptで実装したいが、Webホストが接続をプロキシするための十分な権限を許可していない場合、これはJava =アプレットを使用する方法になります唯一の懸念事項は、クライアントにJavaがインストールされ、許可されていることを確認することです。

4
rojo

WebSocketを使用して、クライアントとサーバー間でデータを送信できます。簡単に言えば、WebSocketがもたらす唯一の違いは、クライアントが以下のことを行うことです。

  • データのタイプや長さなど、いくつかのヘッダーバイトを追加します
  • マスクを追加し、それらを使用してデータをエンコードします

サーバーもヘッダーバイトを追加する必要がありますが、データをエンコードする必要はありません。

プロトコルを正しく実装すると(サーバー側、つまりブラウザにはすでに実装があるため)、テキストとバイナリデータを簡単に送信できます。 (ただし、特に後者の場合、ブラウザーのサポートは限定的です。)

2
pimvdb

WebSocketの利点は、HTTPベースであることです。 httpプロキシが使用されている環境でも使用できます。したがって、Websocketはプレーンtcpとしてより高いインフラストラクチャ互換性を持っています。

さらに、http/WebSocketは、独自に指定する必要があるいくつかの機能を提供します。

  • リダイレクト
  • NATキープアライブ
  • URIによる多重化
  • フレーミング
1
tobias

サーバーからプッシュするデータを要求している場合、それは広くCOMETまたはReverse Ajaxと呼ばれています。

固有のファイアウォールの問題と最小限のサポートが一般的なブラウザーからまだあるため、Webソケットはまだあまり一般的ではありません。

http://www.ape-project.org/ をご覧ください。これは最も人気のある実装の1つです(ただし、現時点ではunix/linuxにネイティブです。Windowsでは、仮想ボックスまたはVMwareベースの実装)

0
Muthu