問題タブ [tyrus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - WebSocket EndPoints アノテーションのエンコーダー リストまたはデコーダー リストのユースケースは何ですか?
私はtyrus WebSocketの実装を学んでいます。しかし、websocket エンドポイントに複数のエンコーダーまたはデコーダーが必要な理由と時期がわかりません。例えば:
デコーダーとエンコーダーのリストには、デコーダーとエンコーダーが 1 つしかありません。これらはデコーダーまたはエンコーダーの配列であるため、一度に複数のタイプのエンコーダーまたはデコーダーを使用できます。しかし、その後言及されたAPIの説明では、
Websocket ランタイムは、メッセージをデコードできるリスト内の最初のデコーダーを使用し、残りのデコーダーは無視します。
常にリストの最初の要素を使用する場合、WebSockets API での複数のエンコーダーまたはデコーダーのユースケースは何ですか?
編集後
サーバーはクライアントに送信します:
クライアントはサーバーに送信します:
クライアントは MessageEncoder クラスを使用してメッセージを送信しますが、サーバーには TextStreamMessageEncoder またはデコーダーと MessageEncoder またはデコーダーを含む 2 つのエンコーダーとデコーダーがあります。では、クライアントがサーバーにメッセージを送信するときにどのデコーダーが使用されるのでしょうか?
java - JSR 356 WebSocket の最大メッセージ サイズの構成に失敗しました
私はデータ トランザクションに Websocket を使用しています。クライアント側は Tyrus クライアント エンド ポイント API を介してリッスンされます。サーバーから 5kb 以下のメッセージ サイズを転送すると、エラーなくクライアントに到達しますが、5kb を超えるメッセージ サイズはクライアントに到達せず、その特定のセッションでの通信が失われます。そのため、セッションでメッセージバッファサイズを以下のように設定しようとしましたが、常にゼロのままで、設定後すぐに構成の下に印刷しようとしましたが、それもゼロを返します。
クライアントエンドポイントメッセージリスナーでメッセージサイズを構成しようとしても
では、websocket のメッセージ バッファ サイズを増やすにはどうすればよいでしょうか。
java - クライアント共有コンテナーが有効になっている場合、Tyrus クライアントはサーバーの再起動時に再接続できません
シナリオは次のとおりです。
- Websocket サーバーが稼働中
- Tyrus クライアント共有コンテナーが有効になっている
- Tyrus クライアントがサーバーに接続します (すべて問題ありません)
- Websocket サーバーの再起動
- Tyrus クライアントはサーバーに接続できず、サーバーが起動した後でも次の例外をスローします。
javax.websocket.DeploymentException: Connection failed
- クライアント アプリケーションを再起動すると、サーバーに再び接続できます。
注: Tyrus クライアントの共有コンテナーが無効になっている場合、この問題は発生しません。
スタックトレース:
NPE はif (runners.length == 1) {
grizzly プロジェクト ファイル RoundRobinConnectionDistributor.java:146 の行から来ています。
のようrunners
ですnull
。
java - javax.websockets / Tyrus でのスレッド化
websocket サーバーからメッセージを送受信する Java アプリを作成しています。アプリがメッセージを受信すると、処理に時間がかかる場合があります。したがって、複数のスレッドを使用してメッセージを受信しようとしています。私の理解でGrizzly
は、セレクタースレッドとワーカースレッドがあります。デフォルトでは、1 つのセレクター スレッドと 2 つのワーカー スレッドがあります。次の例では、これらをそれぞれ 5 と 10 に増やしています。以下の例では、を呼び出すスレッドを一時停止していますonMessage
受信情報の処理をシミュレートするための 10 秒間のメソッド。情報は毎秒入ってくるため、10 個のスレッドでトラフィック量を処理できるはずです。実行をプロファイリングすると、1 つのセレクター スレッドのみが実行され、2 つの作業スレッドが実行されます。さらに、メッセージは 10 秒間隔でのみ受信されます。1 つのスレッドだけがトラフィックを処理していることを示しています。これは非常に奇妙です。プロファイリング中、たとえば 1 つのワーカー スレッドGrizzly(1)
が最初に送信されたメッセージを受信します。それから 10 秒後、'Grizzly(2)' は 2 番目のメッセージを受信します。その後Grizzly(2)
、メッセージを受信し続け、Grizzly(1)
何もアクションを実行しません。
誰かがこの奇妙な動作と、たとえば 10 スレッドが常にメッセージを待っているように変更する方法を説明できますか?
主要:
WebsocketTextClient.java:
java - 不正な UTF-8 シーケンスによる Javax Websocket の終了
javax.websocket APIを使用しorg.glassfish.tyrus
て、実装としてJavaでWebsocketクライアントを作成しています。
通常はすべて正常に動作しますが、非常に大きな文字列を受信すると、原因として謎の 'Illegal UTF-8 Sequence' が原因で接続が終了することがあります。
出力:
文字列が大きすぎるか、文字列に UTF-8 と互換性のない文字が含まれていると思います。
この問題の原因となっている実際の文字列/パケット/フレームに関する情報を取得する方法はありますか? または、エンコーディングの問題を無視し、生の文字列を渡して処理させるように tyrus に指示する方法がある場合は?
そうでない場合、ソケットを介して文字列を送信するという基本的な作業を行い、検証を行わず、応答を処理させる別の Java Websockets クライアントはありますか?
フィードバックをお待ちしております。