Websocket ClientEndpoint OnMessage方法在发送大型String(长度20000)时未调用

时间:2014-10-10 23:09:06

标签: java string websocket client

1)在JavaSE-1.8中使用javax.websocket.ClientEndpoint和javax.websocket.OnMessage

2)服务器(使用Annotations构建)发送长度为20000的字符串:

@ServerEndpoint("/websocket")
public class MyEndpoint {

  @OnMessage
  public String onMessage(String message, Session session) {
    session.getBasicRemote().sendText( "eg String with length 20000 .... ... ..." );
  }
}

3)客户端发送请求并应从服务器接收String(示例刚收到):

@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.WebSocketClient从服务器接收String。

我还尝试用

设置MaxTextMessageBufferSize
session.setMaxTextMessageBufferSize(25000);

错误在哪里?

我必须在哪里报告此错误才能获得更大字符串的工作客户端?

javax.websocket的实现与session-ID相当不错,我不想因为javax.websocket.ClientEndpoint中的这个bug而包装org.java_websocket.client.WebSocketClient?

感谢。

1 个答案:

答案 0 :(得分:0)

听起来像服务器配置问题或错误。

(很难缩小如何提供帮助,因为您没有告诉我们您使用的是哪种服务器)

大多数现代javax.websocket服务器都可以轻松处理多兆字节的邮件大小。

这些工作很棒:

  • Jetty 9.2.x +
  • Tomcat 8.x +
  • Wildfly / JBoss 8.x +

所有这些都具有出色的websocket支持和配置选项。