gpt4 book ai didi

php - Websocket - 客户端不接收数据

转载 作者:搜寻专家 更新时间:2023-10-31 21:41:15 24 4
gpt4 key购买 nike

我正在编写一些基于 websockets (RFC 6455) 的应用程序。不幸的是,它看起来像客户端(在 Chrome 18 上测试)没有收到数据,但服务器说它正在发送......

Chrome 什么也没说

以下是主要的服务器方法:

private function decode($payload) {
$length = ord($payload[1]) & 127;

if ($length == 126) {
$masks = substr($payload, 4, 4);
$data = substr($payload, 8);
} elseif ($length == 127) {
$masks = substr($payload, 10, 4);
$data = substr($payload, 14);
} else {
$masks = substr($payload, 2, 4);
$data = substr($payload, 6);
}

$text = '';
for ($i = 0; $i < strlen($data); ++$i) {
$text .= $data[$i] ^ $masks[$i % 4];
}

$text = base64_decode($text);
return $text;
}

private function encode($text) {
$text = base64_encode($text);
// 0x1 text frame (FIN + opcode)
$b1 = 0x80 | (0x1 & 0x0f);
$length = strlen($text);

if ($length <= 125)
$header = pack('CC', $b1, $length);
elseif ($length > 125 && $length < 65536)
$header = pack('CCS', $b1, 126, $length);
else
$header = pack('CCN', $b1, 127, $length);

return $header . $text;
}

protected function process($user, $msg) {
echo '<< '.$msg.N;
if (empty($msg)) {
$this->send($user->socket, $msg);
return;
}
}

protected function send($client, $msg) {
$msg = $this->encode($msg);
echo '>> '.$msg.N;
socket_write($client, $msg, strlen($msg));
}

最佳答案

如果您要发送一条大于 125 字节但小于 65536 字节的测试消息,您的问题可能是由于要打包的错误格式字符串造成的。我认为这个应该是“CCn”(您当前的代码以错误的顺序写入长度的 2 个字节)。

如果这没有帮助,您可以尝试一些客户端日志记录:

  • 是否运行 onopen 回调以证明初始 handshake成功完成了吗?
  • onerror 或 onclose 回调是否在连接后或服务器发送消息后运行?

关于php - Websocket - 客户端不接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com