我遇到了奇怪的websocket问题:
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);浏览器中的客户端:
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);
}上面的例子是有效的,但是如果我在for循环中将65536更改为65537,它就会失败--服务器不会打印“接收到的消息”,而是打印“已关闭的连接”,服务器或客户端没有报告错误。WebSocket中有最大消息长度吗?
发布于 2014-02-26 08:28:29
WebSocket帧的有效负载长度以字节表示形式定义。两个字节的最大值为0xffff (65535)。要以字节表示65536,至少需要三个字节(0x010000)。
因此,我们对服务器端WebSocket实现有一个限制。您应该考虑使用节点-瓦夫作为服务器端的WebSocket包,因为这将支持4MiB的长度。在node.js中,提供更大的帧是不直接的,因为没有符号的32位整数是节点缓冲模块支持的最大数目。
更详细的答覆:
单个WebSocket帧支持三种不同的帧长度:
然而,正如一开始所指出的那样。八个字节是一个没有符号的64位整数,javascript本机不支持它。"websocket“包似乎只支持两个字节的长度决定字节。"walve“最多可达四个字节。
https://stackoverflow.com/questions/22034824
复制相似问题