問題タブ [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 に答える
244 参照

java - checkOrigin と modifyHandshake に関して Jetty JSR356 の動作が異なるのはなぜですか?

Jetty ( 9.2.3v20140905 )を使って遊んでいServerEndpointConfigたときに、Jetty のコードに出くわして、それがどのように使用されているかを確認したときに、自分のエンドポイントを使用しようとした Web ソケット エンドポイントを接続しました。JsrCreatorWeb ソケット オブジェクトの作成時に使用されていることに気付きました。

modifyHandshake次の状態のServerEndpointConfigjavax.websocket-api 1.0)のjavadocを読みました。

整形式のハンドシェイク リクエストからハンドシェイク レスポンスを作成した後、コンテナによって呼び出されます。コンテナーは、この構成に一致する URIがあることを既に確認しており、 checkOrigin メソッドを使用してオリジンの有効性を判断し、この構成に基づいてネゴシエートされたサブプロトコルと拡張機能を入力しています。カスタム構成は、要求パラメーターを検査し、サーバーが定式化したハンドシェーク応答を変更するために、このメソッドをオーバーライドする場合があります。URIチェックも。 開発者がこのメソッドをオーバーライドしない場合、実装によるリクエストとレスポンスのそれ以上の変更は行われません。

Jetty の機能は次のとおりです。

ご覧のとおり、オリジンはコンフィギュレーターが呼び出された後にチェックされます。応答は、コンフィギュレーターが呼び出された後に変更されます。のメソッドacceptWebSocketWebSocketServerFactory、WebSocketCreator を呼び出します。

その後、次のように呼び出します。

また、次を介して応答を変更しHandshakeRFC6455ます。

とにかく、Jettyが変更するため、コンフィギュレーターだけで応答を変更する方法はありません。

Jetty は WebSocket の Java API である JSR 356 に準拠していないようです。

0 投票する
3 に答える
9755 参照

java - Springboot @ServerEndPoint 「ルート WebApplicationContext が見つかりませんでした。」

@ServerEndPoint アノテーション付きクラスでスプリングを使用するのに問題があります

私はSpringboot 1.2.3を使用しており、エンドポイントの単一のインスタンスを持つ方法を理解しようとしています

春の構成:

WebSocket エンドポイント:

これは、 Spring WebSocket JSR-356 チュートリアルに基づいていますが、次のエラーが発生しました。

組み込みモードと外部 tomcat 8 および jetty 9 (外部モードでは、de Spring 構成ファイルを削除します) の両方でテストしましたが、同じエラーが表示されます。

私が見つけた唯一の回避策は、カスタム コンフィギュレーターを作成することです。

パラメータ化されたコンストラクタを使用して @Bean として作成されます。

SpringConfigurator クラスでそれを行うには、何かを見逃したに違いありませんが、何がわかりません。

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

java - IBM Websphere v8.5.5.4 : Websocket のデプロイメントは成功しましたが、クライアントが接続していません

サンプルの Websocket アプリケーションを Liberty プロファイルにデプロイすることができ、テストどおりに動作していました。次に、同じアプリケーションを実際のWAS v8.5.5.4にデプロイしようとしました(これまでのところ、 WAS 8.5.5.4 には websocket サポートがあることがわかっています)。アプリケーションが正常にデプロイされ、Web ページにアクセスできるように見えますが、Web ソケット クライアントがサーバーに接続できないなど、WEBSOCKET 機能が機能していません。以下の一部のSystemOut.logテール:

何か考えや提案はありますか?

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

javascript - jsr 356 および HTML/js クライアント ベースのセッション変数

しばらくインターネットで調べていたのですが、質問に対する答えが見つかりませんでした...

サーバー側で Java を使用し、クライアント側でプレーン HTML/javascript を使用して Web アプリを構築しています。

私の考えは、JSR 356 を使用して WebSocket を実装し、セッション全体で一部のデータ (ユーザー ログインの詳細) を永続的に保持する必要があるというものです。

質問:呼び出しのたびにデータを再送信する必要がないように、セッション全体でデータを永続的に保つ方法はありますか (jsp/サーブレット EL に似たもの)?

例えば

ありがとう

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

endpoint - java websockets (jsr 356) を使用して、あるエンドポイントから別のエンドポイントにメッセージをリダイレクトする方法

Java websocket について学ぶための個人的なプロジェクトを行っています。基本的に、HTML クライアントはJSR 356 websocketsを介してサーバーにメッセージを送信します。エンドポイントはクライアントからすべてのメッセージを受信します。これらのメッセージを別のポータル/エンドポイントでダッシュボードとしてリアルタイムで@ServerEndpoint("/wsServer")表示したいと考えています。@ServerEndpoint("/wsDashboard")

Apache Kafkaのようなソリューションを見てきましたが、これが必要かどうかはわかりません。

ありがとう

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

jakarta-ee - Weblogic コンテナが Event オブジェクトを注入できないのはなぜですか?

まず最初に、この質問は CDI、特に CDI イベントに関するものであることを伝えたいと思います。コンテナー (私の場合、Weblogic 12 はEventオブジェクトを注入できません)

質問の動機:

JMS を WebSocket と統合しようとしています。基本的に、JMS からのメッセージを消費してからイベントを発生させて、サーバー エンドポイントが JMS メッセージを受信し、最終的に WebSocket プロトコルを介してブラウザーに送信できるようにしようとしています。このブログから、JMS と WebSocket を統合するというアイデアを思いつきました。 他の目的で CDI を使用していないことに注意してください。. しかし、注入されたイベントを起動しようとすると、NPE に直面しています。

私の理解では、使用するには、ほとんど空であってもCDIを定義する必要があります。beans.xml

私の(これをWebアプリのディレクトリbeans.xml内に配置し、以下の内容を貼り付けました:WEB-INF

EventProducerのクラスは次のようになります。

は次のEvent Qualifierように定義されます。

イベントの消費者はクラスのメソッドonJMSMessageであり、関連する部分が以下に貼り付けられます。ServerEndpoint

ここで何が欠けていますか?ポインタはありますか?

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

tomcat - Websocket セッションに同時に書き込もうとすると、Tomcat が「The remote endpoint was in state [BINARY_FULL_WRITING] ...」をスローする

Tomcat 8.0.23 を使用して websocket 接続を終了しています。着信メッセージを処理する次のコードがあります。

しかし、次の例外が発生します。

同じセッションに同時に書き込もうとすると、Tomcat がその例外をスローしているようです。

エラーはこのメソッドから来ています:

java docに基づいているため、 sendBinary がその例外をスローするとは思っていませんでした:

sendBinary void sendBinary(ByteBuffer データ、SendHandler ハンドラ)

例外: IllegalArgumentException - データまたはハンドラーのいずれかが null の場合。

したがって、Tomcat の実装は、状態がこのコードopenにあるかどうかを確認するように見えます。

そうでない場合はopen、その例外がスローされます。

Java doc for RemoteEndpoint.Basic(not RemoteEndpoint.Async)の下に次のように記載されていることに注意してください。

この RemoteEndpoint の基礎となる Websocket 接続が、別のスレッドを送信するための呼び出しが行われたときに、メッセージの送信でビジーである場合 (たとえば、2 つのスレッドが send メソッドを同時に呼び出そうとした場合、または開発者が途中で新しいメッセージを送信しようとした場合)既存のものを送信すると、接続がすでにビジー状態のときに send メソッドが呼び出され、IllegalStateException がスローされる場合があります。

RemoteEndpoint.Async!のような段落はありません。

今の質問

RemoteEndpoint.Async.sendBinary他の何かが同じセッションに書き込んでいる間にセッションを呼び出すことは受け入れられませんか?

受け入れられない場合、リモート エンドポイントに書き込む前にその状態を確認するにはどうすればよいでしょうか。


更新 1:

java.net で同じ問題について議論があったようです。

更新 2:

apache bugzillaの同様のバグ レポートへのリンク。