我已经在这里浏览论坛,这是我发现的最接近问题:WebSocket伺服器
How to (de)construct data frames in WebSockets hybi 08+?
不同的是,我无法获得成功的握手。我认为在握手完成后,取景不会进行,这是否正确?
当Chrome随便更新到使用HyBi 10 websocket协议的版本14(http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10)时,我即将推出一个概念验证。基于握手规范中的信息(http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10#section-5.2.2),我已经能够成功创建一个Sec-WebSocket-Accept密钥(基于它们的示例成功),但在客户端,socket.onopen函数从不会触发。
上次我遇到了WebSocket协议握手问题,这是一个用正确的字节终止握手的问题(或者我认为字符更准确?)。我为当前的实现使用PHP,这意味着尝试解码Python或C#实现,迄今为止没有成功。
这里是我的客户端Javascript在Chrome 14上运行(适用于Windows):
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套接字保持无限连接状态。这意味着onopen永远不会被解雇,所以我的套接字保持不变。任何关于如何调试,或者甚至更好地确认握手方法的想法都会很棒。
这是Python(https://github.com/kanaka/websockify/blob/master/websocket.py)中的一个明显(我不能肯定它是否可行)解决方案。寻找do_handshake方法。
谢谢!
对不起,找到我的解决方案。这是在服务器端响应的最后添加另一个\ r \ n。一旦我的时间限制用完,我会发布详细的答案。 – 2bsharpdev