我有nodejs websocket服务器和客户端发送图像。问题是客户端在发送高分辨率[即512×512或更多]或大尺寸[即几乎>]时自动断开连接。 50KB]图像。
注意:尺寸和尺寸较小,可以发送。
function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
return dataURL;
}
function sendImage(){
var img = getBase64Image(document.getElementById("image") );
var JSONimg = {
' type' : 'img',
'data' : img,
}
ws.send(JSON.stringify(JSONimg));
}
对应的HTML:
<button onclick="sendImage()">Send Image</button>
<img id="image" src="img/image.png" alt="" />
问题
图像的大小或尺寸是插座断开的原因吗?
websocket消息的任何大小限制?
答案 0 :(得分:3)
我找到了解决方法。这里的问题是数据大小。 Web套接字协议有其对邮件大小的限制。在实施之前更好地遵循RFC标准。这里解释rfc6455#section-5.2
答案 1 :(得分:2)
如this Q&A中所述,WebSocket消息在协议级别没有大小限制。然而,由于内存问题,大多数实现都对消息大小有自己的限制。因此,您应该查看您使用的WebSocket实现的文档。
BTW,WebSocket协议允许直接交换二进制消息而不进行二进制到文本转换,这会降低性能并增加消息大小。