問題タブ [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.
android - WSS を介して Websocket サーバーから 16KB を超えるバイナリ メッセージを受信すると、ネイティブ Android アプリの Tyrus Websocket クライアントが異常終了する
WSS 経由で websokcet サーバーに接続するために、ネイティブ Android アプリ (Java) で Tyrus websocket クライアント (バージョン 1.12) を使用しています。バイナリ メッセージを送受信できます。しかし、サイズが 16 KB を超えるバイナリ メッセージをサーバーから受信しようとすると、Tyrus Websocket クライアントが「異常終了」という理由で終了します。
同じサーバーと同じ大きなメッセージは、Chrome (Android) と Safari (iOS) の HTML5/JavaScript Websocket クライアントで正常に動作します。
Tyrus Websocket クライアントのソース コードをデバッグしようとしていますが、それは長い道のりです。
誰かが同様の問題を抱えていて、手がかりを提供できるかどうか疑問に思っています。
よろしくお願いします、アディティア。
java-websocket - Web サーバーなしで Java Websocket API 実装を使用する
GlassFish、Tomcat、Jetty などの Web サーバーで実行することなく、Java でカスタム WebSocket アプリを実装することは可能ですか?
私は非常にカスタマイズされたアプリを開発するつもりであり、スレッド、監視、負荷分散、メッセージングなどを管理する独自の方法を実装したいと考えています。(たとえば Java TCP の ServerSocket と比較して) スタンドアロン サーバー用の Grizzly 統合や Servlet サポートなどの Tyrus コンテナーがあることは知っていますが、ここにも Jetty がありますが、それが私が探しているものかどうかはわかりません。Grizzly または Jetty は、おそらくそれ自体がスタンドアロンのソリューションですか? Tyrus が Grizzly WebSocket 実装のある種のラッパーであることは知っていますが、正直なところ、これら 2 つがどのように相互接続されているかはわかりません。
どんな提案でも大歓迎です!ありがとうございました!
java - CDI を使用した Tyrus WebSocket サーバー スタンドアロン
Tyrus Standalone Server で依存性注入を使用することは可能ですか?
java - tyrus CLI を使用したバッチ ファイルからの Websocket テスト
Websocket サーバーに小さなテストを実装しようとしていて、Tyrus CLIが見つかりました。実行すると、コマンドラインからの入力を取得するようだったので、次のステップで試しました
接続は開かれますが、ping は実行されません。ping
また、コマンドをテキストファイルに移動して実行してみました
ただし、コマンドを実行せずに接続のみを開きます。
コマンドを手動で入力せずに、コマンド ラインから Tyrus CLI を使用するにはどうすればよいですか?
glassfish-4 - Websocket @OnOpen が Glassfish 4.1.1 Payara 4.1.1.115 Tyrus 1.11 で起動されない
私は実際に悪夢の中にいます。私のwebappはチャットにwebsocketsを使用していますが、ここで問題が発生します:
Glassfish 4.1u13 を使用すると、アクセス ログ監視を有効にするまで、すべて正常に機能しました。それ以来、すべての ws リクエストが 2 回行われ、Web ソケットはハンドシェイクを実行できませんでした。 https://java.net/jira/browse/GLASSFISH-21007
Glass Fish 4.1.1 にアップデートしようとした -> 問題 PERSIST
Payara 4.1.1.115 (glassfish のパッチ バージョン) に切り替えようとしたところ、すべてがスムーズに進みました。これで、Glassfish インスタンスで Websocket とアクセス ログを取得できるようになりました。
数分後、ページをリロードすると、クライアント アプリとサーバー間の通信が常に行われるとは限らないことに気付きました。ネットワークを検査 -> ハンドシェイクは正しく行われますが、データを交換できません。
サーバー側では、2 つのシステムを作成しました。1 つはリクエスト サーブレットのフィルターに、もう 1 つは Websocket エンドポイントにあります。すべてのリクエストがサーバーに到着し、ハンドシェイクを行いますが、wss が 101 にアップグレードされたとしても、@OnOpen が呼び出されないことがあります。Tyrus 1.12 (payara は 1.11 を使用) にアップデートし、1.8.1 (機能する Glassfish 4.1u13 で使用されるバージョン) にダウングレードしようとしましたが、何も起こりません。
この動作をデバッグするにはどうすればよいですか?
java - ContainerProvider によるスタンドアロン Java Websocket クライアント NoClassDefFoundError
私はJavaが初めてですが、小さなWebSocket関連のプロジェクトを行うためにJavaを使用する必要があります。
そこで、VirtualBox の CentOS 7 に JDK 1.8.0 と NetBeans 8.1 をインストールしました。
tyrus-standalone-client-jdk 1.12プラグインをpom.xmlに追加して、スタンドアロンの Websocket クライアントを作成したところ、正常にビルドされました。ただし、以下のエラーが発生しました。
もう少し検索を行ったところ、Oracle のドキュメントによると、API の「実装 JAR ファイルのMETA-INF/services/javax.websocket.ContainerProviderContainerProvider
ファイルに、コンテナー実装の完全修飾クラス名をリストする必要がある」ことがわかりました。そのため、 serviceloader-maven-pluginを pom.xmlに追加しました。その結果、META-INF/services/javax.websocket.ContainerProviderファイルが生成されましたが、コンテンツがなく、ランタイム エラーが引き続き発生していました。以下の内容を手動で変更して JAR に再パックしようとしましたが、うまくいきませんでした。ServiceLoader
- org.glassfish.tyrus.container.inmemory.InMemoryContainerProvider
- org.glassfish.tyrus.client.ClientManager
Java ファイルとpom.xmlを添付しました。私は何時間も働いてきましたが、何が問題なのか見当がつかないので、このスレッドへの返信をお待ちしております.
どうもありがとうございました。
===========LIST1: pom.xml===========
===========LIST2: Switchclient.java===========
パッケージ org.sample.switchclient;
java - Tyrus Websocket クライアントからローカル IP アドレスを取得する方法
サーバーエンドポイントへの接続に使用されるインターフェースの IP アドレスを意味する、独自の IP アドレスを認識する必要がある Java Websocket クライアントを作成しています。
クライアントはアドレスを変更する可能性があるため、サーバーに (再) 接続するたびに、ローカル アドレスを更新する必要があります。SessionクラスにはgetLocalAddress()メソッドがあるため、これは Jetty のクライアントを使用して簡単に実現できます。
一方、Tyrus のセッション クラスには、この機能がありません。これに対する簡単な回避策は、単純な古いソケットを使用することです。クライアントが呼び出されるたびonOpen
に、サーバーへの通常の TCP ソケットを開き、ソケットのローカル アドレスを取得してから閉じます。しかし、それは無駄でエラーが発生しやすいので、むしろ Tyrus を掘り下げてソケットからローカル アドレスを取得したいと思います。それを行う方法はありますか?
android - Android で Proguard を使用して Tyrus Websocket クライアントを使用する
Android で Tyrus (org.glassfish.tyrus.bundles:tyrus-standalone-client:1.10) を使用しようとしています。ここに私のプロガード関連の部分があります:
ClientManager connectToServer を呼び出しますが、このメソッドは返されず、ハングします。しかし、proguard を無効にすると機能します。proguardを使用してAndroidで動作させるにはどうすればよいですか?
authentication - Tyrus websocket を使用した Spring Boot 1.3.1 で認証例外が発生する
最近、従来の spring プロジェクトから Spring ブート 1.3.1 に移行しました。既存のクライアントは Tyrus 1.12 を websocket クライアントとして使用しています。
アップグレード後、クライアントが接続されなくなり、AuthenticationException がスローされることがわかりました。奇妙なことに、サーバーの再起動後、AuthenticationException をスローした直後に初めて接続できます。もう少し掘り下げてみると、Tyrus は最初に 401 を受け取り、その後資格情報を渡すことがわかりました。サーバー ログは、最初に ROLE_ANONYMOUS を割り当て、次に正しいロール ROLE_GUEST を割り当てて、同じ動作を示しています。
ネゴシエーションの後、サーバーは接続を閉じて切断するようです。
Tyrus で spring stomp Websocket クライアントを使用すると、同じ動作が観察されました。
資格情報がヘッダーで送信される場合、この同じサーバー設定は正常に機能します。
資格情報がヘッダーにないため、これは機能しません
なぜそれが一方の方法で機能し、もう一方の方法では機能しないのか理解できません。
spring-boot にアップグレードした後、私たちのソフトウェアは下位互換性がなくなり、401 を受け取る前にすべての外部クライアントにヘッダーに承認を挿入するように依頼する必要があります。
誰か助けてくれませんか?
java - CSRFを防ぐためのJava Websocketsのオリジンチェック
Java Websocket エンドポイント (JSR356 3.1) をプログラムでデプロイしていますがOrigin
、CSRF 攻撃を軽減するためにリクエスト ヘッダー値を検証し、ヘッダー値と一致するハンドシェイク リクエストのみを受け入れるようHost
にOrigin
したいと考えています。
進むべき道はメソッドをオーバーライドすることだと私には思えます:
ServerEndpointConfig.Configurator.checkOrigin(String originHeaderValue)
(Tomcat 8 によって提供される実装は常に を返しますtrue
)、しかし、私が見る問題は、このメソッドには 1 つのパラメーターしかなく、この値を比較するためのホスト ヘッダー値を見逃していることです。
また、このクラスはこの情報を返すメソッドを提供しないため、元のヘッダー値を以前に既知のホスト値または値のセットと比較しない限り、このメソッドは役に立たないと思いますが、これも意味がありません。私のアプリケーションは、ホスト名または IP が変化する別の場所で表示される可能性があります。
すべてのヘッダー値を読み取ることができる実装内でこの検証を実行することを検討していmodifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response)
ますが、何かを誤解していると確信しています。
だから私の質問は:
この検証を実行する適切な方法は何ですか?
ありがとう、ナチョ