問題タブ [jsr356]

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 に答える
475 参照

java - Java WebSocket API: サービスを特定のドメインに制限する

たとえばHTML5Rocks WebSockets チュートリアルで述べたように、

サーバーは、そのサービスをすべてのクライアントが利用できるようにするか、明確に定義された一連のドメインに存在するクライアントだけが利用できるようにするかを決定します。

OK、WebSocket 1.0 (JSR 356) ( Tomcatで実行) の Java API を使用してそれを行う方法は?

0 投票する
5 に答える
7588 参照

java - JSR-356 WebSocket @ServerEndpoint と Spring 3 Bean の統合

完全な新しい JSR-356 WebSockets サポートなしで Spring 3.2.5 を使用しています。

@ServerEndpointSpring コンテキストではなく、サーブレット コンテナー自体によってインスタンス化される WebSocket サーバーにシングルトン Bean 参照が必要です。

それを行うためのきれいな方法は何ですか?

私の現在の解決策:@Service静的フィールドにインスタンスを持つシングルトン Bean を作成しました:

静的メソッドで取得し、@ServerEndpointnull が返された場合はユーザーを切断します (サーバーの起動時に Bean が作成されず、ユーザーが接続する場合):

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

java - パラメータ/属性をJSR-356 WebSocketクライアント(@ClientEndpoint)に渡す方法は?

グループ化/統計のために、コンテナーでインスタンス化された WebSocket クライアント エンドポイントにいくつかの属性を追加したいと考えています。JSR-356 でクライアント WebSocket エンドポイントを作成しました。

Session session = container.connectToServer( MyClientEndpoint.class , uri );

SessionオブジェクトまたはMyClientEndpointインスタンスを渡したい:

MyClientEndpointインスタンスはコンテナー(私の例では Jetty) によってインスタンス化されるため、コンストラクターで引数を渡すことはできません。Sessionまた、ユーザー プロパティで自分のパラメーターを設定できません。

Session session = container.connectToServer( ClientSocket.class , uri ); session.getUserProperties().put( "group", this);

ハンドラーにプロパティがなく、呼び出しの前にプロパティが設定される@OnOpenという保証がないためです。"group"@OnMessage

コンテナによってインスタンス化された @ClientEndpoint オブジェクトで追加のオブジェクトを使用できるようにする方法で JSR-356 WebSocket に接続するにはどうすればよいですか?

0 投票する
4 に答える
12009 参照

java - JSR-356 WebSockets with Tomcat - 単一の IP アドレス内で接続を制限する方法は?

@ServerEndpoint単純な DDOS 攻撃を防ぐために、単一の IP アドレスからの有効な接続を制限したいJSR-356 を作成しました。

Java ソリューション (JSR-356、Tomcat、または Servlet 3.0 仕様) を検索していることに注意してください。

HandshakeRequestカスタム エンドポイント コンフィギュアラーを試しましたが、オブジェクトでも IP アドレスにアクセスできません。

iptables のような外部ソフトウェアを使用せずに、単一の IP アドレスから JSR-356 接続数を制限するにはどうすればよいですか?

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

java - modifyHandshake を使用して WebSocket ハンドシェイクにヘッダーを追加する

ハンドシェイク中にカスタム ヘッダーを送信しようとしています。ServerEndpointConfig.Configurator でハンドシェイクをインターセプトし、modifyHandshake をオーバーライドできます。

メソッドが呼び出され、id が応答ヘッダーに追加されますが、追加のヘッダーは送信されません。

クライアント フレームワークではないことを確認するために、wireshark でスニッフィングしました。

生成された ID をクライアントに送信したいのですが、それを余分な呼び出しで行いたくありません。送信されない理由はありますか、それとも別のアプローチがありますか?

ヘッダーも追加する開発ブログの例を見つけたmodifyHandshakeので、理論的には可能であると思います。

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

java - Tomcat JSR 356 websocket でページを更新すると例外が発生する

私は ServerEndpoint クラスを持っています:

ページを更新すると、onError が呼び出され、例外 t に次の説明が含まれます: java.util.concurrent.ExecutionException: java.net.SocketException: Broken pipe

何が理由でしょうか?

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

java - Websocket - ServerEndpoint と ClientEndpoint がメッセージを交換しない

私は現在、Glassfish 4 と「オンボード」実装で Websockets をテストしていますが、メッセージを送受信できませんが、Java EE 7 チュートリアル - メッセージの送受信How to build Java WebSocket Applications Using the JSR 356 APIなどのチュートリアルに従っています。シンプルなクライアントサーバー通信を実装したいので、私が持っているのは

サーバ:

とクライアント:

Websocket が利用可能で、サーバーに接続できます (URI を変更すると 404 ハンドシェイク エラーが発生します) が、(サーバー側の) メソッドはどれも呼び出されず、取得している唯一のログ メッセージは次のとおりです。

クライアント側で。サーバーが少なくとも onOpen 呼び出しをログに記録することを期待します。このテストでは、(そのままの) Glassfish 4 と Netbeans 8 を使用します。

メッセージが交換されない理由を教えてください。

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

java - Java/Tomcat: WebSocket セットアップ完了の処理方法

次のシナリオがあります。同じアプリケーションを持ついくつかの Tomcat インスタンスが、起動時に相互に接続する必要があります。サーバー間の接続にはWebSocket(JSR-356)を利用しています。Tomcat が起動したら、別のサーバーで確立を開始する必要があります。

内部 WebSockets メカニズムが稼働していて、WebSockets の使用を開始できるようにするには、どうすれば最も正しく処理できますか?

アプリケーションはSpring 4に基づいています。

春の起動時にこの Execute メソッドを試しました、このHow to add a hook to the application context initialization event? このTomcat は、 spring を使用したスタートアップ イベントの後に実行されます

これらのアプローチはすべてクールですが、その時点ではまだ WebSocket を使用する準備ができていないようです。次の例外がスローされます。

今のところ、回避策として、接続を確立する前に WebServlet の init() メソッドで 3 秒の遅延を使用しますが、回避したいハックです。

何か案は?ありがとう!