PHP Webscoekt,读取碎片套接字消息

时间:2017-01-22 14:25:34

标签: php websocket

我有以下代码来解除浏览器使用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;
}

1 个答案:

答案 0 :(得分:0)

当从浏览器接收消息时,您可能无法获得打包的内容。经过几次测试。浏览器可以通过对多个消息进行分组或以块的形式拆分单个消息来发送数据。

在解析服务器端的数据时,我们需要牢记这一点。您可以记下以下几点。

  1. 确保收到所有数据,如果没有,请收到联系 消息按照他们到达的顺序。
  2. 如果收到所有数据,请取消屏蔽消息
  3. 使用有效负载长度框架查看预期的数据量。
  4. 您可能还会同时收到多条消息。在那种情况下你 需要将数据溢出到较小的块中并取消屏蔽每个块 seperately。
  5. 我不确定我是否能够提出我的观点,但我衷心希望这会有所帮助。