問題タブ [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.
java - Java WebSocket API: サービスを特定のドメインに制限する
たとえばHTML5Rocks WebSockets チュートリアルで述べたように、
サーバーは、そのサービスをすべてのクライアントが利用できるようにするか、明確に定義された一連のドメインに存在するクライアントだけが利用できるようにするかを決定します。
OK、WebSocket 1.0 (JSR 356) ( Tomcatで実行) の Java API を使用してそれを行う方法は?
java - JSR-356 WebSocket @ServerEndpoint と Spring 3 Bean の統合
完全な新しい JSR-356 WebSockets サポートなしで Spring 3.2.5 を使用しています。
@ServerEndpoint
Spring コンテキストではなく、サーブレット コンテナー自体によってインスタンス化される WebSocket サーバーにシングルトン Bean 参照が必要です。
それを行うためのきれいな方法は何ですか?
私の現在の解決策:@Service
静的フィールドにインスタンスを持つシングルトン Bean を作成しました:
静的メソッドで取得し、@ServerEndpoint
null が返された場合はユーザーを切断します (サーバーの起動時に Bean が作成されず、ユーザーが接続する場合):
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 に接続するにはどうすればよいですか?
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 接続数を制限するにはどうすればよいですか?
java - modifyHandshake を使用して WebSocket ハンドシェイクにヘッダーを追加する
ハンドシェイク中にカスタム ヘッダーを送信しようとしています。ServerEndpointConfig.Configurator でハンドシェイクをインターセプトし、modifyHandshake をオーバーライドできます。
メソッドが呼び出され、id が応答ヘッダーに追加されますが、追加のヘッダーは送信されません。
クライアント フレームワークではないことを確認するために、wireshark でスニッフィングしました。
生成された ID をクライアントに送信したいのですが、それを余分な呼び出しで行いたくありません。送信されない理由はありますか、それとも別のアプローチがありますか?
ヘッダーも追加する開発ブログの例を見つけたmodifyHandshake
ので、理論的には可能であると思います。
java - Tomcat JSR 356 websocket でページを更新すると例外が発生する
私は ServerEndpoint クラスを持っています:
ページを更新すると、onError が呼び出され、例外 t に次の説明が含まれます: java.util.concurrent.ExecutionException: java.net.SocketException: Broken pipe
何が理由でしょうか?
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 を使用します。
メッセージが交換されない理由を教えてください。
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 秒の遅延を使用しますが、回避したいハックです。
何か案は?ありがとう!