LINUX.ORG.RU

JS отправляет в WebSocket кусок буфера вместо целого.

 


0

1

WARNING!!! Пост больше не имеет смысла. Гипотеза со слов «похоже на то» оказалось бредом окаянным. Оставим для истории.

Когда вкладка неактивна или окно браузера свёрнуто, вкладка переходит в режим лени и тунеядства. Троттлинг. Вставляет много sleep() в поток выполнения JS кода (FPS падает до 7 с 60).

Но эффект странный получается. Вот кусок моего быдлокода.

Вначале где-то на старте скрипта создаётся и долго живёт вебсокетный сокет «sock». Далее в коде периодически дёргается send_packet_x() для отправки 4-байтового WebSocket пакета бинарного. Обычно всё это работает.

Но когда вкладка свёрнута, начинается пока не совсем изведанное странное. Похоже на то, что вместо посылки 1 пакета с 4 байтами, присылаются 2 пакета - в одном 1 байт, в другом оставшиеся 3. Я так понимаю, вебсокет имеет право бить поток вебсокет-дейтаграммы как ему вздумается, даже если они мелкие?

//
// WebSocket socket.
//
var sock = new WebSocket(some_address);
sock.binaryType = 'arraybuffer';

...


function send_packet_x() {
    var b = new ArrayBuffer( 1 + 2 + 1);
    var dv = new DataView(b);
		
    var off = 0;

    dv.setUint8(off, 11, true); off += 1;
    dv.setUint16(off, 2222, true); off += 2;
    dv.setUint8(off, 11, true); off += 1;

    //
    // SEND
    //
    sock.send(b);
}

UPDATE Я тупое животнае, ошибка была в сервере, а JS отправляет всё нормально.



Последнее исправление: hlamotron (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.