問題タブ [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.

0 投票する
1 に答える
845 参照

java - サーバー エンドポイント内から接続を閉じるためのベスト プラクティスは何ですか?

Cookie を取得して処理するカスタム コンフィギュレーターをセットアップしました。出力は、構成のユーザー プロパティに追加されます。

-annotated メソッドでは、@OnOpenその値をパスからの値と比較します。不一致がある場合は、1008、ポリシー違反の理由でソケットを閉じたいと思います。

これを達成するための最良の方法は何ですか?

私はできた:

  1. メソッドを手動で呼び出し、@OnClose理由を渡す
  2. 例外をスローして@OnError呼び出されるようにする
  3. 他の何か?

ソケットを閉じて、Tyrus にリソースをクリーンアップしてもらいたいです。ドキュメントに目を通しましたが、リソースがどのようにクリーンアップされるかについての答えが見つかりませんでした。どんな助けでも大歓迎です。ありがとう。

0 投票する
1 に答える
480 参照

java - Tyrus Web ソケットでの OAuth の使用

Authorization: Bearer [oauth token]OAuthのようなヘッダーを設定したい。の行で何かを使用しようとしています。正確な構文を思い付くことができません。これを解決するには?client.getProperties().put()

0 投票する
1 に答える
1338 参照

java - 私の Websocket は接続に永遠に時間がかかります

更新 コンストラクターの org.glassfish.tyrus.core.BaseContainer では、これらの 2 つの行が非常に遅く実行されているようです。

両方の方法のコメントで Android について言及されているのですが、デスクトップ向けの Java に間違ったコードを使用していますか?


私はコードをそのまま使用しています:

Tyrus Websocket ドキュメント: 1.1.2 クライアント エンドポイント

どういうわけか、接続に約 10 秒かかります。具体的には、Eclipse のデバッガーを実行すると、次の行になります。

これに関係しているのでしょうか?潜在的に類似したスタック オーバーフローの質問

私は本当に途方に暮れています。私は、Javascript を使用したブラウザーではなく、Java クライアントで Websocket を使用しようとしているまれな外れ値であるように感じます。

0 投票する
0 に答える
1990 参照

java - Java Spring オーディオ チャット

Java と Spring を使用して、ユーザーとの音声チャットを可能にする Web アプリケーションを開発するにはどうすればよいですか? 私は Java Web 7 ([ https://tyrus.java.net/][Project Tyrus])内で WebSocket を使用しており、テキスト メッセージでうまく機能します。


しかし、オーディオチャットの場合、私はそれを理解できません。WebRTC を使用してマイクを検出しようとしました。クライアント側のコードは次のとおりです。

サーバ側:

例外があります。デコードとエンコードに関するものだと思いますが、それを処理する方法がわかりません:

Java (Tyrus プロジェクト、websocket、Spring) で音声チャットを行うにはどうすればよいですか?

0 投票する
0 に答える
478 参照

java - Tyrus WebSocket セッションを閉じるときの遅延

Tyrus をスタンドアロン モード (グリズリー サーバー) で使用して、WS 経由で大量のバイナリ データをクライアントに送信するサービスを構築しています。私のセットアップでは、サービスはプロキシ サーバーの背後にあるため、送信されるすべてのデータは最初にプロキシでバッファリングされ、プロキシの後に UNIX 送信バッファにバッファリングされます。

この転送のある時点で、サーバー側で接続を閉じたいと思います。私がそうすると、バッファとプロキシで待機しているすべてのデータが送信されるとすぐに、クライアントは onClose イベントを取得します。

すべてのメッセージが順番に処理されるため、終了メッセージがクライアントによって最後に受信されるというこの動作は理解できます。

しかし、私が必要としているのは、WebSocket 接続をリアルタイムで閉じる方法です。基礎となる TCP 接続が閉じられるように、クライアントは送信バッファとプロキシに保存されている残りのデータを取得できません。

Tyrus API を使用してそのような動作を作成する方法を知っている人はいますか?

0 投票する
0 に答える
922 参照

java - Tyrus クライアント websocket メッセージ ハンドラー

Eclipse でクライアントが非デバッグ モードで起動しないという問題が発生しています。メッセージはデバッグ モードで表示されます。 他の誰かが同じ問題に直面している場合はお知らせください。

何かご意見は?構成を教えてください。

0 投票する
1 に答える
2177 参照

java - Tyrus が使用する WebSocket 接続あたりのスレッド数は?

Tyrus websocket 接続のスレッド モデルを理解しようとしています。Tyrus は WebSocket 接続ごとに 1 つのスレッドを使用していますか? 関連するスレッドプーリングメカニズムはありますか?

Tyrus 実装または Java 用の Websocket 実装の内部構造について説明しているドキュメントを見つけようとしましたが、スレッド モデルがどのように機能するかについて説明しましたが、見つかりませんでした。

WebSocket 接続を維持するためにスレッド モデルがどのように機能するかについての情報は役に立ちます。

何千もの WebSocket 接続をサポートできるようにサーバーを最適化しようとしています。現在、1000 の Websocket 接続のみで、JVM は最大 1800 のスレッドを使用しています!

更新 1:

Tomcat 8 で Tyrus 1.9 を使用しています。

サーバーは約 500 の Websocket 接続を終了し、別のサーバーへの 500 の Websocket 接続も開始します。そのため、現在、サーバーには約 1000 の Websocket 接続があります。

私が気づいたことの 1 つは、私のケースに関連していると思われる TYRUS-275 の問題です。Tyrus クライアントはデフォルトで WebSocket 接続ごとに 3 つのスレッドを作成するようです。私の場合、約 500 の接続があるため、送信 Websocket 接続のためだけに約 1500 のスレッドを持つことになります。

また、Tyrus で共有コンテナーを有効にすると、SELECTOR および WORKER スレッド プールを使用するメリットが得られるようです。

スレッドプールを最適化する方法を今疑問に思っていますか? 500 の WebSocket 接続に必要な SELECTOR スレッドと WORKER スレッドの数は? 公式はありますか?

更新 2:

JVM に接続すると、次のスレッドが表示されます (興味深いスレッドのみをリストします)。

Grizzly スレッドは、Tyrus クライアントが WebSocket ごとに作成しているものだと思います (ところで、Grizzly スレッドを慎重に数えていなかったと思います。カウントは 3 つすべてで同じになるはずです)。1 つのセレクターと 2 つのワーカーですよね?

http-apr-8080-exec-xxx は tomcat によって作成されたスレッドだと思います。これらのスレッドは、着信 WebSocket 接続を処理していますか? 次のスレッドについてもっと知りたいです。

  • WebSocketServer-localhost-ROOT-xxxx
  • tyrus-x-スレッド-xx
  • nioEventLoopGroup-xx
  • キープアライブタイマー
  • http-apr-8080-exec-xxx

スレッドの各セットが何をするか知っている人はいますか? これを説明する文書はありますか?

また、Tomcat は APR コネクタを使用するように設定されているようですが、この状況では NIO または NIO2 を使用する方がよいのではないかと考えていました。