我正在本地主机上使用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());