0

こんにちは。私の 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 のみを使用するようにリファクタリングする必要がありますか? ありがとう。

4

1 に答える 1