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

时间:2013-09-03 04:09:36

标签: java javascript tomcat websocket

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

我该如何解决? THX。

Here is the capture from chrome development tool

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

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);
}

2 个答案:

答案 0 :(得分:1)

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

    protected StreamInbound createWebSocketInbound(String string, HttpServletRequest hsr) {

    MyMessageInbound inbound = new MyMessageInbound();

    inbound.setByteBufferMaxSize(9999999);
    inbound.setOutboundByteBufferSize(9999999);

    return inbound;
}

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

答案 1 :(得分:0)

尝试发送为ArrayBuffer:

ws.send(f.readAsArrayBuffer());