1)在JavaSE-1.8 中使用javax.websocket.ClientEndpoint和javax.websocket.OnMessage
2) 服务器(使用注释构建)发送长度为20000:的字符串
@ServerEndpoint("/websocket")
public class MyEndpoint {
@OnMessage
public String onMessage(String message, Session session) {
session.getBasicRemote().sendText( "eg String with length 20000 .... ... ..." );
}
}
3) 客户端发送请求并应该从服务器接收字符串(示例刚刚接收):
@ClientEndpoint
public class Receiver {
@OnMessage
public void processMessage(String message, Session session) {
System.out.println("Message received: " + message );
}
}
但是:客户端未收到任何消息。较短的绳子(如长度500)有效。服务器上未引发异常(如果使用了try-catch)。所以,发送的长度为20000的字符串消失了,没有任何错误!
向服务器发送请求的浏览器从服务器接收字符串,一切正常,所以问题必须在客户端。
实现org.java_websocket.client.WebocketClient也从服务器接收String。
我还尝试用设置MaxTextMessageBufferSize
session.setMaxTextMessageBufferSize(25000);
虫子在哪里?
我必须在哪里报告这个错误才能为更大的字符串获得一个可用的客户端?
javax.websocket的实现及其会话ID非常好,我不想仅仅因为javax.websocket.ClientEndpoint中的这个bug就包装org.java_websocket.client.WebocketClient?
谢谢。
听起来像是服务器配置问题或错误。
(很难缩小如何提供帮助,因为您没有告诉我们您使用的是哪种服务器)
大多数现代的javax.websocket
服务器可以轻松地处理多兆字节的消息大小。
这些工作很棒:
- 码头9.2.x+
- Tomcat 8.x+
- Wildfly/Joss 8.x+
所有这些都有出色的websocket支持和配置选项。