WebSocket cannot send / receive a string longer than 65536 characters

I encountered an obscure websocket problem:

server in node.js:

var websocket     = require('websocket');
var http          = require('http');

var transportServer = http.createServer(function(request, response) {});
var wsServer = new websocket.server({ httpServer: transportServer });

wsServer.on('request',function(request) {
    var connection = request.accept(null,request.origin);
    console.log('connected');

    connection.on('message',function(message) {
        console.log('message received');
    });

    connection.on('close',function(){
        console.error('connection closed');
        process.exit(0);
    });
});

transportServer.listen(5000);

client in browser:

var ws = new ReconnectingWebSocket 'ws://localhost:5000'
ws.onopen = function(){
    var buf = '';
    for(var i = 1; i <= 65536; ++i) buf = buf + 'a';
    ws.send(buf);
}

The example above works, but if I change to 65536in a loop 65537, it fails - the server does not print the message β€œreceived” and instead closes the β€œconnection”, and no error is reported on the server or client. Is there a maximum message length in WebSocket?

+4
source share
1 answer

WebSocket , . 0xffff (65535). 65536 , (0x010000).

, WebSocket . node -walve WebSocket , 4MiB. node.js , 32Bit , .

:

WebSocket :

  • ( 0x7d)
  • ( 0x7e, , )
  • ( 0x7f, )

, . 64- , javascript . "websocket", -, , . "walve" - .

+2

Source: https://habr.com/ru/post/1528907/


All Articles