我最近几天一直在尝试使用WebSockets,并且对这项新而酷炫的技术有些混合的感受。我编写了一个简单的聊天客户端,使用的是HTML5 Labs发布的最新版本,我相信这是hybi-09草案规范的发布版。在Chrome(dev channel v14.0)中,客户端工作得很好。一切都按照预期功能。然而,在其他主流浏览器中,如支持WebSockets的FireFox(v6.0b)(是的,我打开了WebSockets功能),Safari(v5.1)等,由于某种原因无法连接。以下是我的一些客户端代码:
在Safari浏览器中:
$(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,我不确定。如果有人知道问题所在以及如何/是否可以解决,我将不胜感激。谢谢!