2011-08-05 65 views
5

過去幾天我一直在使用WebSockets進行試驗,我對這種新的非常酷的技術有着一些混合體驗。我寫了一個簡單的聊天客戶端,它使用HTML5 Labs的最新版本,我相信它是hybi-09草稿版本。客戶端在Chrome中很棒(開發通道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 WebSockets的草案10規範,我認爲FF 6實現了草稿07或08,我不確定Safari 5.1。如果任何人有什麼問題是什麼和/或如何/如果我能解決它,我會很感激的幫助。謝謝!

+0

感謝您在Window代碼片段中。正在尋找一種簡單的方式來編寫跨平臺js。 – Stevko

回答

5

Chrome 14和Firefox 7(Aurora版本,前綴爲「Moz」,默認情況下啓用)支持HyBi-10版本的協議。其他所有具有原生WebSockets支持的仍在使用該協議的Hixie-76版本。

有一些已經支持HyBi協議的服務器實現,現在Chrome 14已經有了更多的實現。有一些支持Hixie-76和較新的HyBi協議版本(libwebsockets,websockify)。我並不特別感到驚訝,微軟的原型服務器實現只支持該協議的一個版本(因爲它們在希克時期並不在遊戲中)。

更新

某些服務器選項:

  • libwebsockets - C實現
  • websockify - 我的Python實現。 websockify是TCP套接字代理/網橋的websocket,但websocket.py是一個通用的websocket模塊。
+0

哇,夢幻般的答案。非常感謝。 :)任何想法,我會發現一個支持兩者的服務器實現? – Chris

1

下面是一個WebSockets協議test report列出了Chrome 14和Firefox 7/8與最新協議規範特定功能的一致性。

該測試套件是Autobahn WebSockets的一部分,它是我的一個小項目,包括基於Python/Twisted的WebSockets實現,可用於編寫客戶端和服務器。

代碼是Apache 2.0許可的,全部在GitHub上。

1

這是一個支持Hybi10和舊協議的基於.NET的(免費)WebSocketServer。可以在http://xsockets.net

中找到或通過在Visual Studio 2010中使用安裝,包裝XSockets在Package Manager控制檯運行添加到您的項目(MVC3)(也認爲,2008年會做的NuGet現在)

我使用其中一個視頻作爲幫助http://xsockets.net/Video/Index