大家好。在我的 WebSocket 应用程序中,WS 服务器需要处理三种消息:DataPkg、SigPkg 和 WS_SigPkg。DataPkg 是用于用户数据的二进制文件,带有控制器标头;SigPkg 是String 用于WS 客户端之间的用户数据控制,WS_SigPkg 也是String 用于诸如注册到WS 服务器以及在不同WS 会话之间切换DataPkg 和SigPkg。
所以我放了六个编码器/解码器:
decoders = {SigDecoder.class, WS_SigDecoder.class, DataDecoder.class},
encoders = {SigEncoder.class, WS_SigEncoder.class, DataEncoder.class}
然后我得到以下错误:
Caused by: javax.servlet.ServletException: Web socket server initialization failed.
at org.glassfish.tyrus.servlet.TyrusServletFilter.init(TyrusServletFilter.java:126)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:131)
... 28 more
Caused by: javax.websocket.DeploymentException: Class org.sample.xyzserver.XyzServer. Text MessageHandler already registered.
似乎 GlashFish Server 4.1.1 无法为字符串消息添加两个 MessageHandler,尽管在上层它们是不同的,解码器可以找到。
这里是否有任何误解或有一个简单的解决方法,或者我必须重构只使用一个 MessageHandler 用于字符串和一个用于二进制?谢谢。