Я создаю экспериментальное приложение чата, используя PHP на https://github.com/kamshory/WebRTC-WebSocket-Chat
Когда клиент отправляет короткое сообщение JSON, оно работает нормально. Но когда клиент отправляет сообщение JSON размером более 1 КБ, сервер не может его правильно принять. Сервер прочитал неверные данные.
Вот мой код
<?php
class Utility
{
/**
* Unmask incoming framed message
* @param $text Masked message
* @return string Plain text
*/
public static function unmask($text)
{
$length = ord($text[1]) & 127;
if ($length == 126)
{
$masks = substr($text, 4, 4);
$data = substr($text, 8);
}
else if ($length == 127)
{
$masks = substr($text, 10, 4);
$data = substr($text, 14);
}
else
{
$masks = substr($text, 2, 4);
$data = substr($text, 6);
}
$text = "";
for ($i = 0; $i < strlen($data); ++$i)
{
$text.= $data[$i] ^ $masks[$i % 4];
}
return $text;
}
/**
* Encode message for transfer to client
* @param $text Plain text to be sent to the client
* @return string Masked message
*/
public static function mask($text)
{
$b1 = 0x80 | (0x1 & 0x0f);
$length = strlen($text);
if ($length <= 125)
{
$header = pack('CC', $b1, $length);
}
else if ($length > 125 && $length < 65536)
{
$header = pack('CCn', $b1, 126, $length);
}
else if($length >= 65536)
{
$header = pack('CCNN', $b1, 127, $length);
}
return $header . $text;
}
......
Кто-нибудь может объяснить, как замаскировать и снять маску JSON сообщение в WebSocket?