过去几天我一直在使用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。如果任何人有什么问题是什么和/或如何/如果我能解决它,我会很感激的帮助。谢谢!
感谢您在Window代码片段中。正在寻找一种简单的方式来编写跨平台js。 – Stevko