WebSocket版本和向后兼容性

时间:2011-08-05 17:48:09

标签: javascript html5 websocket

过去几天我一直在尝试使用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。如果有人对问题是什么和/或我是如何解决它有任何见解,我会很感激帮助。谢谢!

3 个答案:

答案 0 :(得分:5)

Chrome 14和Firefox 7(Aurora版本,前缀为“Moz”,但默认启用)支持HyBi-10版本的协议。其他具有本机WebSockets支持的东西仍然使用协议的Hixie-76版本。

有些服务器实现已经支持HyBi协议,现在很快就会有Chrome 14本身拥有它。有一些支持Hixie-76和更新的HyBi版协议(libwebsockets,websockify)。我并不特别感到惊讶的是,微软的原型服务器实现只支持一个版本的协议(因为它们在Hixie期间不在游戏中)。

<强>更新

一些服务器选项:

  • libwebsockets - C实施
  • websockify - 我的python实现。 websockify是TCP套接字代理/桥接的websockets,但websocket.py是一个通用的websocket模块。

答案 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

相关问题