过去几天我一直在尝试使用WebSockets,而且我对新的非常酷的技术有一些不同的经验。我写了一个简单的聊天客户端,它使用HTML5 Labs的最新版本,我相信这是hybi-09草案规范的发布。客户端在Chrome(dev通道v14.0)中运行良好。一切都按预期运作。但是,在本机支持WebSockets的每个其他主要浏览器中(FireFox(v6.0b)(是的,我确实启用了WebSockets功能),Safari(v5.1)),由于某种原因它无法连接。这是我的一些客户端代码:
$(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 :(得分:5)
Chrome 14和Firefox 7(Aurora版本,前缀为“Moz”,但默认启用)支持HyBi-10版本的协议。其他具有本机WebSockets支持的东西仍然使用协议的Hixie-76版本。
有些服务器实现已经支持HyBi协议,现在很快就会有Chrome 14本身拥有它。有一些支持Hixie-76和更新的HyBi版协议(libwebsockets,websockify)。我并不特别感到惊讶的是,微软的原型服务器实现只支持一个版本的协议(因为它们在Hixie期间不在游戏中)。
<强>更新强>:
一些服务器选项:
答案 1 :(得分:1)
以下是一个WebSockets协议test report,列出了Chrome 14和Firefox 7/8与最新协议规范的特定功能的一致性。
测试套件是Autobahn WebSockets的一部分,我的一个小项目,包括基于Python / Twisted的WebSockets实现,可用于编写客户端和服务器。
代码是Apache 2.0许可的,全部都在GitHub上。
答案 2 :(得分:1)
这是一个基于.NET(免费)的WebSocketServer,支持Hybi10和旧协议。可以在http://xsockets.net
找到或使用Visual Studio 2010中的程序包管理器控制台中的Install-Package XSockets运行对项目的添加(MVC3)(另外想想2008现在会做Nuget)
我使用其中一个视频作为帮助http://xsockets.net/Video/Index