WebSocket在尝试发送大尺寸图像时断开连接



我正在本地主机上使用java和javascirpt测试WebSocket,运行Tomcat 7.0.42,两者之间没有代理。它可以很好地通过websocket发送文本和小尺寸的图像。但是,当尝试发送大尺寸照片时,它将被迫关闭客户端(chrome浏览器)上的连接(注意,浏览器上的websocket关闭连接后,tomcat的"MessageInbound中的onClose回调"不会得到通知)。

我该怎么解决?thx。

这是铬开发工具的捕获

以下是我在客户端的代码:

for (var i = 0, f; f = files[i]; i++) {
    // step 1: tell server who the people you want to send
    ws.send(JSON.stringify({
        action: "binary",
        receiver: <%=selectedfriend.getUserId()%>,
        timestamp: new Date().getTime()
   }));
   // step 2: send file
   ws.send(f);
   var reader = new FileReader();
   reader.onload = (function(theFile) {
       return function(e) {
           var span = document.createElement('span');
           span.innerHTML = ['<img class="thumb" style="width: 50px;height: 30px;" src="', e.target.result,
           '" title="', escape(theFile.name), '"/>'].join('');
           appendImage(span.innerHTML, "pullleft");
       };
   })(f);
   reader.readAsDataURL(f);
}

最后,我为我的问题找到了一个解决方案,我在Tomcat上所做的是使用:

    protected StreamInbound createWebSocketInbound(String string, HttpServletRequest hsr) {
    MyMessageInbound inbound = new MyMessageInbound();
    inbound.setByteBufferMaxSize(9999999);
    inbound.setOutboundByteBufferSize(9999999);
    return inbound;
}

但另一个问题是:我应该使用什么合适的值,这里是9999999,当我使用WebSocket上传8-9MB以下的文件时,应该很好地测试这个值,但为什么,我如何测量它?请再次在这里帮助和讨论,谢谢!

尝试作为ArrayBuffer:发送

ws.send(f.readAsArrayBuffer());

相关内容

  • 没有找到相关文章

最新更新