こんにちは。私の WebSocket アプリケーションでは、WS サーバーは、DataPkg、SigPkg、および WS_SigPkg の 3 種類のメッセージを処理する必要があります。DataPkg は、コントローラー ヘッダーを含むユーザー データのバイナリです。SigPkg は WS クライアント間のユーザー データ制御用の String であり、WS_SigPkg も WS サーバーへの登録や異なる WS セッション間の DataPkg と SigPkg の切り替えなどの String です。
そこで、6 つのエンコーダー/デコーダーを配置しました。
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 は、文字列メッセージに 2 つの MessageHandler を追加できないようですが、上位層ではそれらは異なり、デコーダーはそれを見つけることができます。
ここに誤解がありますか、簡単な回避策がありますか、または文字列とバイナリに1つの MessageHandler のみを使用するようにリファクタリングする必要がありますか? ありがとう。