PHP套接字在快速发送数据时出现奇怪字符



我使用了这个带有套接字的聊天PHP应用程序:https://phppot.com/php/simple-php-chat-using-websocket/

但当我发送数据非常快时:

for (let i = 0; i < 50; i++) {
websocket.send(JSON.stringify({ action: 'testtesttest' }));
}

我有一些奇怪的字符,比如:

)›Ñ?‹[gÀV1“ÂHÈ™]a„“]g‹ÌpÈ’`‹Úch‹Ž)‹Mw‹Ìg‹Úc"…Ò ôh‹Ž)‹”PfÇ„]a‹Ìg‹ÚcNÔÌC1ÇÂ1Ä•1…ÂL1“» ?›ÌNÔ½EYÞ 

他们说PHP websocket |当以高频率发送数据时会出现奇怪的字符,这与解锁方法有关:

function unseal($socketData) {
$length = ord($socketData[1]) & 127;
if($length == 126) {
$masks = substr($socketData, 4, 4);
$data = substr($socketData, 8);
}
elseif($length == 127) {
$masks = substr($socketData, 10, 4);
$data = substr($socketData, 14);
}
else {
$masks = substr($socketData, 2, 4);
$data = substr($socketData, 6);
}
$socketData = "";
for ($i = 0; $i < strlen($data); ++$i) {
$socketData .= $data[$i] ^ $masks[$i%4];
}
return $socketData;
}

但我不知道是什么。

有人能帮我吗?

我以前也遇到过这种情况。该问题是由客户端在同一TCP数据包中发送的多个帧引起的。这是由客户出于效率原因而完成的。

在解封函数中,您获得了$length变量,但从未使用过它。若要解决此问题,请将$data变量截断$length字节,然后使用剩余字节再次调用解封函数。

这种递归调用意味着解封函数可能会返回多条消息,因此您可能希望它返回一个字符串数组。

编辑:我在这里输入了我的发现:https://github.com/g105b/text(为了好玩,将应用程序部署在https://www.walloftext.art)

最新更新