WebSocket服务器使用最新协议(hybi 10)

时间:2011-08-14 07:03:02

标签: html5 websocket phpwebsocket

我在这里浏览了论坛,这是我发现的最接近的问题:

How to (de)construct data frames in WebSockets hybi 08+?

不同之处在于我无法获得成功的握手。我假设在握手完成之后框架不会发挥作用,这是正确的吗?

当Chrome方便地更新到使用HyBi 10 websocket协议(http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10)的版本14时,我即将发布概念验证。基于握手规范中的信息(http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10#section-5.2.2),我已经能够成功创建Sec-WebSocket-Accept键(基于他们的示例成功),但在客户端,socket.onopen函数永远不会开火。

上次我遇到了WebSocket协议握手的问题,这是一个用正确的字节终止握手的问题(或者我认为字符更准确?)。我正在使用PHP进行当前的实现,这意味着尝试解码Python或C#实现,到目前为止没有成功。

以下是我在Chrome 14(适用于Windows)中运行的客户端Javascript:

var socket;
socket = new WebSocket(host);
socket.onopen = function(msg){
    // process onopen
};
socket.onmessage = function(msg){ 
    // process message
};
socket.close = function(msg){
    // process close
};

这是握手的服务器端PHP代码:

function dohandshake($user,$buffer){
    // getheaders and calcKey are confirmed working, can provide source if desired
    list($resource,$host,$origin,$key,$version) = $this->getheaders($buffer);
    $request = "HTTP/1.1 101 Switching Protocols\r\n" .
            "Upgrade: WebSocket\r\n" .
            "Connection: Upgrade\r\n" .
            "Sec-WebSocket-Accept: " . $this->calcKey($key) . "\r\n";
    socket_write($user->socket,$request);
    $user->handshake=true;
    return true;
}

客户端发送初始握手后,Javascript套接字将无限期地保持在CONNECTING状态。这意味着onopen永远不会被解雇,因此我的套接字处于不稳定状态。关于如何调试,甚至更好地确认我的握手方法的任何想法都会很棒。

这是Python(https://github.com/kanaka/websockify/blob/master/websocket.py)中的一个明显的(我不能说它是否有效)。查找do_handshake方法。

谢谢!

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

这是我对这个问题的解决方案。如果在遥远的将来这个代码停止工作,请在这里发帖!

https://github.com/esromneb/phpwebsocket/blob/master/websocket.class.php

查看我的播客以获取更多黑客提示! http://portforwardpodcast.com/

答案 2 :(得分:0)

xsockets.net在c#中提供了服务器端解决方案,如果可以的话?但是,您不需要编写任何服务器端代码来执行上面尝试的操作。使用通用处理程序,只编写JavaScript。

XSockets具有多协议支持,最高支持hybi10,具有crossbrowser功能,并且可以回退到silverlight和flash。 如果您想编写自己的协议等,还支持协议,处理程序和拦截器的插件...请参阅http://youtu.be/MDz1jJJeXKI?hd=1上的演示

http://xsockets.net/Documentation/Index

的文档

最诚挚的问候 Uffe

答案 3 :(得分:0)

另一件事......你可以测试JsBin上的hybi10支持。这里有一个包含所有可编辑代码的多房间聊天。

虽然没有闪光和银光后退!

http://jsbin.com/ohitil

/ Uffe