websocket 客户端在发送大数据时断开连接
websocket client disconnects on sending large data
我正在使用 nodejs websocket 服务器和客户端发送图像。问题是客户端在发送高分辨率 [即 512 x 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 消息有大小限制吗?
如 this Q&A 中所述,WebSocket 消息在协议级别没有大小限制。然而,由于内存问题,大多数实现都有自己的消息大小限制。所以你应该看看你使用的 WebSocket 实现的文档。
顺便说一句,WebSocket 协议允许直接交换二进制消息而无需二进制到文本的转换,这会降低性能并增加消息大小。
我发现 this.The 问题的解决方案与数据大小有关。 Web 套接字协议对消息大小有限制。在实施之前最好遵循 RFC 标准。此处解释rfc6455#section-5.2
我正在使用 nodejs websocket 服务器和客户端发送图像。问题是客户端在发送高分辨率 [即 512 x 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 消息有大小限制吗?
如 this Q&A 中所述,WebSocket 消息在协议级别没有大小限制。然而,由于内存问题,大多数实现都有自己的消息大小限制。所以你应该看看你使用的 WebSocket 实现的文档。
顺便说一句,WebSocket 协议允许直接交换二进制消息而无需二进制到文本的转换,这会降低性能并增加消息大小。
我发现 this.The 问题的解决方案与数据大小有关。 Web 套接字协议对消息大小有限制。在实施之前最好遵循 RFC 标准。此处解释rfc6455#section-5.2