我正在使用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);
}
答案 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());