我有以下代码来解除浏览器使用Websocket发送给服务器的消息。我不太了解它,但这不考虑帧是连续的还是最后一帧。
如何确定帧是否继续。我知道这样做的方法是先读取消息的[FIN]位,但我无法找到办法。请帮我。
function unmask($payload) {
$length = ord($payload[1]) & 127;
if($length == 126) {
$masks = substr($payload, 4, 4);
$data = substr($payload, 8);
$firstcode=substr($payload, 1, 1);
}
elseif($length == 127) {
$masks = substr($payload, 10, 4);
$data = substr($payload, 14);
$firstcode=substr($payload, 1, 1);
}
else {
$masks = substr($payload, 2, 4);
$data = substr($payload, 6);
$firstcode=substr($payload, 1, 1);
}
$text = '';
for ($i = 0; $i < strlen($data); ++$i) {
$text .= $data[$i] ^ $masks[$i%4];
}
return $text;
}
答案 0 :(得分:0)
当从浏览器接收消息时,您可能无法获得打包的内容。经过几次测试。浏览器可以通过对多个消息进行分组或以块的形式拆分单个消息来发送数据。
在解析服务器端的数据时,我们需要牢记这一点。您可以记下以下几点。
我不确定我是否能够提出我的观点,但我衷心希望这会有所帮助。