2011-08-05 68 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