DWi*_*ams 1 javascript php websocket
我正在用PHP制作一个简单的WebSocket服务器.我的websocket客户端连接到它很好,但是每当我尝试通过它发送数据时,我都会在JavaScript中抛出"错误:INVALID_STATE_ERR:DOM异常11".
这和其他几个问题似乎描述了我遇到的同样问题,但WebSocket协议已经发生了变化.
我假设问题是我的脚本是不正确的握手,如该问题中所述.我正在使用使用WebSocket版本8的Chromium 15.
这是我的握手功能(部分我的代码部分修改自我在某处发现的过时示例):
function dohandshake($user, $buffer)
{
server_log(1, 'Requesting handshake...');
// Determine which version of the WebSocket protocol the client is using
if(preg_match("/Sec-WebSocket-Version: (.*)\r\n/ ", $buffer, $match))
$version = $match[1];
else
return false;
if($version == 8)
{
// Extract header variables
if(preg_match("/GET (.*) HTTP/" ,$buffer,$match)){ $r=$match[1]; }
if(preg_match("/Host: (.*)\r\n/" ,$buffer,$match)){ $h=$match[1]; }
if(preg_match("/Sec-WebSocket-Origin: (.*)\r\n/",$buffer,$match)){ $o=$match[1]; }
if(preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$buffer,$match)){ $k = $match[1]; }
// Generate our Socket-Accept key based on the IETF specifications
$accept_key = $k . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
$accept_key = sha1($accept_key, true);
$accept_key = base64_encode($accept_key);
$upgrade = "HTTP/1.1 101 Switching Protocols\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"Sec-WebSocket-Accept: $accept_key";
socket_write($user->socket, $upgrade, strlen($upgrade));
$user->handshake = true;
return true;
}
else
{
server_log("Client is trying to use an unsupported WebSocket protocol ({$version})");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我在几个我发现的例子中测试了密钥生成代码,并且它似乎根据这些示例返回了正确的密钥
本世纪的愚蠢解决方案,显然在握手响应结束时有两个"\ r \n"换行符.
| 归档时间: |
|
| 查看次数: |
4394 次 |
| 最近记录: |