websocket客户端在发送大数据时断开连接
Posted
技术标签:
【中文标题】websocket客户端在发送大数据时断开连接【英文标题】:websocket client disconnects on sending large data 【发布时间】:2015-05-30 22:01:03 【问题描述】:我有 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" />
问题
图像的大小或尺寸是套接字断开的原因吗?
websocket 消息有大小限制吗?
【问题讨论】:
【参考方案1】:我找到了解决方案。这里的问题在于数据大小。 Web 套接字协议对消息大小有其限制。在实施之前最好遵循 RFC 标准。这里解释rfc6455#section-5.2
【讨论】:
什么是数据限制?例如 Json。【参考方案2】:如this Q&A 中所述,WebSocket 消息在协议级别没有大小限制。然而,由于内存问题,大多数实现对消息大小都有自己的限制。所以你应该看看你使用的 WebSocket 实现的文档。
顺便说一句,WebSocket 协议允许直接交换二进制消息,而无需进行二进制到文本的转换,这会降低性能并增加消息大小。
【讨论】:
以上是关于websocket客户端在发送大数据时断开连接的主要内容,如果未能解决你的问题,请参考以下文章
Websocket PHP:从客户端发送到服务器的立即断开连接和奇怪的消息字符串
Javascript Websockets在页面卸载时断开连接