2011-08-05 40 views
5

私は過去数日間WebSocketを試してきましたが、私は新しい、非常にクールな技術といくつかの経験をしています。私は、HTML5 Labsの最新リリースを使用するシンプルなチャットクライアントを作成しました。これはhybi-09のドラフト仕様リリースだと思います。クライアントはChrome(devチャネルv14.0)でうまくいきます。すべてが機能するはずです。しかし、WebSocket(FireFox(v6.0b)、WebSockets機能を有効にしたSafari(v5.1))をネイティブにサポートする他の主要なブラウザでは、何らかの理由で接続できません。WebSocketのバージョンと下位互換性

$(document).ready(connect); 

function connect() { 
    if ('WebSocket' in window) { 
     websocket = new WebSocket('ws://' + window.location.hostname + ':4502/chat'); 
    } 
    else if ('MozWebSocket' in window) { 
     websocket = new MozWebSocket('ws://' + window.location.hostname + ':4502/chat'); 
    } 
    else { 
     //not supported 
     return; 
    } 

    websocket.onopen = function() { 
     //do some setup stuff 
    }; 

    websocket.onclose = function() { 
     //DOH 
    }; 

    websocket.onmessage = function (e) { 
     //Do some stuff with e.data 
    }; 
} 

と、いくつかの(C#)サーバコード:ここに私のクライアントコードの一部だ、私が言ったように

static void Main(string[] args) 
{ 
    var host = new WebSocketsHost<ReverseService>(); 
    host.AddWebSocketsEndpoint("ws://" + Environment.MachineName + ":4502/chat"); 
    host.Open(); 

    Console.ReadLine(); 
} 

、それはChromeで罰金接続し、それが必要として.onopen機能に当たります。 FFとSafariでは、それはonclose関数にまっすぐ進み、決して接続しません。 FFで、私は、次のエラーを取得:

"NetworkError: 501 Not Implemented - http://localhost:4502/chat" 
Firefox can't establish a connection to the server at ws://localhost:4502/chat 

そしてSafariで:

WebSocket frame (at 4294967295 bytes) is too long. 

私は考えることができる唯一のことは、後方互換性の問題のいくつかの種類です。私はChrome 14.xがhybi WebSocketのドラフト10の仕様を実装していると思うし、FF 6は07または08のドラフトを実装していると思うし、Safari 5.1についてはわからない。問題が何であるか、どのように解決できるかについて誰かが洞察力を持っているなら、私は助けに感謝します。ありがとう!

+0

ありがとうございますin窓のコードの断片。クロスプラットフォームのjsを書くための簡単な方法を探していました。 – Stevko

答えて

5

Chrome 14とFirefox 7(オーロラビルド、 "Moz"が接頭辞ですが、デフォルトで有効)は、HyBi-10バージョンのプロトコルをサポートしています。ネイティブのWebSocketをサポートしているものは、依然としてHixie-76版のプロトコルを使用しています。

すでにHyBiプロトコルをサポートしているサーバー実装があります。すぐにChrome 14がネイティブになっています。 Hixie-76と新しいHyBiバージョンのプロトコル(libwebsockets、websockify)の両方をサポートするものがいくつかあります。 Microsoftのプロトタイプサーバー実装では、Hixieの期間中ゲームに参加していなかったため、プロトコルの1つのバージョンのみがサポートされていることは特に驚きではありません。

更新

一部のサーバー・オプション:

  • libwebsockets - Cの実装
  • websockify - 私のPython実装。 websockifyはTCPソケットプロキシ/ブリッジに対するWebソケットですが、websocket.pyは一般的なwebsocketモジュールです。
+0

うわー、素晴らしい答え。どうもありがとう。 :)私は両方をサポートするサーバー実装のいずれかを見つけるだろうか? – Chris

1

ここにはWebSocketsプロトコルtest reportが記載されています。Chrome 14とFirefox 7/8が最新のプロトコル仕様に準拠しています。

テストスイートはAutobahn WebSocketsで、Python/TwistedベースのWebSocket実装を含む小さなプロジェクトで、クライアントとサーバーの作成に使用できます。

コードはApache 2.0ライセンスで、すべてGitHubにあります。

1

ここには、Hybi10と古いプロトコルをサポートする.NETベースの(無料の)WebSocketServerがあります。http://xsockets.net

で発見またはVisual Studio 2010年のパッケージマネージャコンソールのインストール・パッケージXSocketsを使用して、プロジェクト(MVC3)への追加を実行することができます

I用途(また2008年には、今Nugetを行いますと思います) 1つのビデオのように助けてhttp://xsockets.net/Video/Index