我正在用 PHP 编写 Web 套接字服务器,因为我找不到支持 RFC 6455 规范的服务器。在此过程中,我使用phpwebsocket代码作为基础并使其与 RFC 6455 兼容。至少我为接收消息部分做了。每当我尝试将消息发送回服务器时,我都会收到不同的消息。我敢肯定这是因为我的位掩蔽技能……太糟糕了。所以经过相当多的试验和错误后,我仍然有这个问题,我不知道为什么。
Time OpCode Mask Length Data
1>2012-06-25T18:05:58.014Z 1 true 4 Ping
2>2012-06-25T18:06:02.121Z 1 true 5 hello
3 2012-06-25T18:06:02.121Z A server must not mask any frames that it sends to the server.
或者
3 2012-06-25T18:06:02.121Z Unexpected continuation frame.
我在我的电脑上使用 PHP 5.4.4,使用命令行界面。php ws.php
这就是我启动 Web 套接字服务器所需要做的一切。然后我将其wsClient.html
用作我的客户。在 Windows 8 Preview 上使用最新版本的 Google Chrome (21.0.1180.4 dev-m) 我收到以下消息。
你可以从我的github repo下载 php 服务器和客户端,然后从那里玩很久。问题出在WebSockets::send函数中。
private function send($client, $payload)
{
$frame = pack('C2a*', 0b10000001, 0b01111111 & strlen($payload), $payload);
socket_write($client, $frame, strlen($frame));
}
我究竟做错了什么?