1

私は現在、単純なクライアント\サーバーのWebSocketデモを起動して実行しようとしています。また、サーバーとしてC#Nuggetプロジェクトを使用しようとしています。Netscape(v5.1.4)を介してサーバーに接続できますが、Chrome(v18.0.1)を介して接続することはできず、クライアントのハンドシェイクまで問題を追跡しました。

Nuggetは、クライアントのハンドシェイクが次の形式であると想定しています。これは、Netscapeが送信する形式とまったく同じです。

予想されるクライアントハンドシェイク

一方、Chromeのクライアントハンドシェイクは次のようになります。

chromesクライアントハンドシェイク

Nuggetサーバーで問題を引き起こしている2つのリクエスト(sec-websocketパラメーター)の違いを強調しました。

クライアントハンドシェイクのNetscapeとChromeの実装は、異なるバージョンのWebSocket仕様に基づいていると思います。 誰かがこれについてこれ以上の情報を持っていますか?両方のタイプのハンドシェイクを処理するコードを追加するだけで大​​丈夫ですか、それとも1つは非推奨ですか?

どんな洞察も歓迎します、

ジェームズ

リソース:Websocketクライアントハンドシェイクを理解する

4

1 に答える 1

2

Netscapeは、プロトコルの古い、非推奨のHixieバリアントを話しているようです。Safariもこれを使用します。Chromeは最新のRFC6455を使用しています。最終的には、すべてのブラウザがRFC6455を使用することが期待できます。

できるだけ多くのクライアントタイプをサポートしたい場合は、両方のバリアントを処理するコードを追加しても問題ありません(実際には正しいです)。ハンドシェイク後の読み取り/書き込みのデータフレーミングも、使用されているプロトコルバリアントに応じて変化することに注意してください。

于 2012-04-04T10:43:40.860 に答える