2

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

我该如何解决?谢谢。

这是来自 chrome 开发工具的捕获

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

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

2 回答 2

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文件时,应该很好地测试该值,但是为什么,我该如何测量呢?请帮助并再次在这里讨论,谢谢!

于 2013-09-06T02:07:15.973 回答
0

尝试作为 ArrayBuffer 发送:

ws.send(f.readAsArrayBuffer());
于 2013-09-03T05:23:02.763 回答