【发布时间】:2015-11-19 17:14:03
【问题描述】:
我正在用 Java 编写一个 Websocket 客户端,使用 javax.websocket API,org.glassfish.tyrus 作为实现。
通常一切正常,但有时,当我收到非常大的字符串时,连接会以神秘的“非法 UTF-8 序列”作为关闭原因关闭。
log.info("Ws closed cuz: "
+ reason.getCloseCode() + " , "
+ reason.getReasonPhrase() + " , "
+ reason.toString());
输出:
INFO: Ws closed cuz: NOT_CONSISTENT , Illegal UTF-8 Sequence ,
CloseReason[1007,Illegal UTF-8 Sequence]
我猜是字符串太大,或者字符串包含任何不兼容 UTF-8 的字符。
有没有办法获得有关导致此问题的实际字符串/数据包/帧的更多信息?或者,如果有办法告诉 tyrus 忽略任何编码问题,只需将原始字符串传递给我,让我处理它?
如果没有,是否有另一个 java websockets 客户端通过套接字传输字符串并且不进行任何验证,只让我处理响应?
感谢任何反馈。
【问题讨论】:
-
解析原因是一个选项?
-
你能调试客户端看看哪些字节有问题吗?
-
我在 ASP.NET websocket 实现中遇到了同样的问题。在我的例子中,问题原来是大字符串在代表斯堪的纳维亚字母的多字节字符中间被分割。见github.com/dotnet/corefx/issues/29834。 Java 客户端可能也有类似的情况。
标签: java utf-8 websocket glassfish tyrus