問題タブ [spring-websocket]
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.
spring-mvc - spring-mvc、websockets プッシュ統合
このリンクhttp://spring.io/guides/gs/messaging-stomp-websocket/をたどり、アプリを起動して実行しました。
私が望んでいたのは、それ以上のものでした。クライアントが何も送信しなくても、データをクライアントにプッシュバックできるようにしたかったのです。
そのため、以下のようなリスナーを使用して長時間実行されるタスクをセットアップしました
GreetingController は RunnableListener を実装し、RunnableListener にはメソッド public Greeting greeting(HelloMessage message); があります。
メソッドの実装は、スレッドを開始してからリスナー メソッドを呼び出すことです。
その場合、コンソールに出力が表示されますが、ブラウザーには何も表示されません。
実行中のタスクを開始し、サーバーがポーリングの代わりに Spring を使用してコンテンツをブラウザーにプッシュする方法を誰か教えてください (javascript の setTimeout など?)
よろしくティン
spring - Spring 4.0.3.RELEASE 使用時の Spring WebSockets 例外
次のWebソケット構成があります
私が時々見る例外は
nio コネクタに更新した後も、次の例外が発生します
java - StompClient を使用した Spring WebSocket の配信メッセージのエラー
トピックにメッセージを送信しようとしていますが、問題はメッセージを送信しても何も起こらないことです... apache tomcat 7.0.53 を使用しています
更新: 04/15: テストへのリンク:
http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:8080/kupo
ログイン: 管理者
パスワード: 管理者
Tomcat ログにアクセスするためのリンク:
http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:28778/
PS: メッセージの監視を開始するには、サイドバーのコンボボックスをチェックする必要があります
Github リンク: https://github.com/tiarebalbi/kupo
ログ:
コード:
Javascript 接続:
ブラウザ コンソール:
Websocket コンテキスト構成:
spring - Spring 4 STOMP over Websockets - ログインとパスコードを適切にセットアップする方法
Spring 4 Stomp over Websockets で遊んでいます。今、ログインとパスワードを構成に入れようとしています。
しかし、別のログインとパスコードで接続しようとすると、接続できます。これが私のjavascriptです。
構成が間違っていますか?どうすれば適切にセットアップできますか?よろしくお願いします
spring - Spring WebSocket - clientOutboundChannel でのメッセージの順次配信 (キューごと)
Spring WebSockets、Messaging、RabbitMQ を使用して、リアルタイムのイベントベースのアプリケーションに取り組んでいます。このアプリケーションでは、RabbitMQ に挿入された正確な順序でメッセージをクライアントに配信する必要があります。
「編集済み」
私たちの目標は、ブラウザからメッセージを受信し、サーバー上で順番に処理し (ルート パラメータによって決定される一意のオブジェクトに対して)、メッセージを充実させ、外部 STOMP MQ (RabbitMQ) を介してすべてのサブスクライブ ブラウザにブロードキャストすることです。
MessageMapping メソッドは次のとおりです。
@MessageMapping(/commands.{route}.{data}) public CommandMessage receiveCommand(CommandMessage メッセージ、プリンシパル プリンシパル) {
}
CorePoolSize と maxPoolSize をそれぞれ 1 に設定して ClientInboundChannel と ClientOutboundChannels を構成すると、すべてのメッセージが正常に処理されます。
ClientInboundChannel の corePoolSize と maxPoolSize を増やすと、メッセージが誤った順序で MQ に到達します。ClientOutboundChannel に対して同じ増加を行うと、メッセージが間違った順序でブラウザーに到達します。
]
テストは、単一のブラウザー クライアントを使用して行われました。
StompBrokerRelayMessageHandler のトレースを有効にし、次のようなログ エントリを受け取りました。
2014-05-06 14:26:39 TRACE [clientInboundChannel-6] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:412] 処理メッセージ = [ペイロード バイト [303]] [ヘッダー = {stompCommand = 送信、nativeHeaders = {コンテンツ タイプ = [ application/json;charset=UTF-8], destination=[/topic/commands.BKN01.20140318]}, simpMessageType=MESSAGE, simpDestination=/topic/commands.BKN01.20140318, contentType=application/json;charset=UTF- 8, simpSessionId=ehjcoxb3, id=a31d0e3d-12cc-f562-1ec2-e2d7ba0899eb, タイムスタンプ=1399400799940}] 2014-05-06 14:26:39 DEBUG [clientInboundChannel-6] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler] メッセージを Java 6MessageHandler に転送します。ブローカー 2014-05-06 14:26:39 TRACE [clientInboundChannel-3] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:406] destination=/app/commands.BKN01.20140318 へのメッセージを無視.20140318 2014-05-06 14:26:39 TRACE [clientInboundChannel-1] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:412] 処理メッセージ = [ペイロード バイト [314]] [ヘッダー = {stompCommand = 送信、nativeHeaders = {コンテンツ タイプ=[アプリケーション/json;文字セット=UTF-8], 宛先=[/トピック/commands.BKN01.20140318]}, simpMessageType=MESSAGE, simpDestination=/topic/commands.BKN01.20140318, contentType=アプリケーション/json;文字セット= UTF-8、simpSessionId=ehjcoxb3、id=3cc7b4ae-8ea4-ef8a-6c4d-c3bc1ed23bcd、タイムスタンプ=1399400799947}] 2014-05-06 14:26:39 DEBUG [clientInboundChannel-1] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:658] メッセージをブローカーに転送しています
また、org.springframework.web.socket.messaging パッケージで StompSubProtocolHandler のトレースをオンにし、次のようなメッセージを受け取りました。
2014-05-07 10:58:58 TRACE [http-nio-8080-exec-5] oswsmStompSubProtocolHandler [StompSubProtocolHandler.java:180] クライアントからメッセージを受け取りました session=u8wrnsr6
どの情報も、message.serverSequence プロパティ (MQ に送信する前に設定される) をログの詳細のさまざまな ID にマップする簡単な方法を提供しません。
インバウンド/アウトバウンド チャネル スレッドを増やして順序を維持する方法はありますか? たとえば、チャネルを「ルート」に結び付けたり、スレッドを「ルート」に固定したりできますか?
助けてください。
ありがとうございました、
ダン
java - Spring 4 Web ソケット - ストンプ ブローカーが必要ですか?
新しいSpring 4 WebSocketで遊ぶために、次のリンクを使用しています。
http://spring.io/guides/gs/messaging-stomp-websocket/
スプリング フレームワークを使用するために、ストンプ ブローカーを使用する必要があるかどうか疑問に思っていました。それを使用するブローカーの少ない方法はありますか?
ありがとう
spring - Spring 4 AbstractWebSocketMessageBrokerConfigurer with SockJS がトランスポートを適切にネゴシエートしない
したがって、すべての websocket チュートリアル/例は非常に簡単に見えると言わざるを得ませんが、単純な例から除外されている本当に重要な情報を見つけるには、本当に掘り下げる必要があるようです。フロントエンドで SockJS を使用して Spring 4 Stomp メッセージブローカーを使用している webapp には、まだかなりの問題があります。
現在、SockJS() を有効にせずに StompEndpointRegistry にエンドポイントを追加し、dojo の dojox/socket を使用してフロントエンドでソケットを宣言すると、Firefox 28 は問題なく websocket を開きます。ただし、IE8 と IE9 でのサポートが必要なので、SockJS に切り替えました。AbstractAnnotationConfigDispatcherServletInitializer を使用して、すべてのフィルターとサーブレットが非同期を使用するように設定されていることを確認する方法を理解するのにかなりの時間がかかりました (これに関する Web 上のドキュメントは非常にまばらです)。これを解決したら、Firefox で動作するようになりましたが、xhr_streaming のみを使用しています。sessionCookieNeeded を true に設定すると、IE9 はデフォルトで接続に iframe を使用しようとしますが、失敗します。
必要な Cookie を false に設定すると、IE は xdr-streaming を使用して正常に動作しますが、リクエストで jsessionid Cookie が失われ、コントローラーで重要なプリンシパルを取得できなくなります。Spring Security で同じオリジン x フレーム ヘッダーを有効にし、ヘッダーがリクエストに存在することを確認しましたが、役に立ちませんでした。したがって、A) Spring と SockJS が Firefox で WebSocket トランスポートを使用して適切にネゴシエートするようにする方法と、B) IE8 と 9 で iframe トランスポートを適切に使用して Cookie を保持できるようにする方法を理解したいと思います。
ここに私の設定/コードがあります:
ウェブアプリの構成:
Spring MVC 構成:
Spring ルート コンテキスト構成:
春のセキュリティ:
WebSocket メッセージ ブローカーの構成:
WebSocket コントローラー:
最後に、テストに使用している html の JavaScript は次のとおりです。
Firefox に接続すると、コンソールに次のように表示されます。
/info 応答は次のとおりです。
Websocket 接続を確立しようとすると、奇妙な文字列エラーが発生することに注意してください。それが私の問題の原因だと思いますが、私は何も面白いことをしていませんし、何が原因なのかわかりません.
IE では、ネットワーク トラフィックは次のようになります。iframe.html ファイルは適切にビルドされているように見えますが、バックエンドに接続できません。
情報応答は次のようになります。
リクエストまたはレスポンス ヘッダーを確認したい場合は、お知らせください。
更新 1:
ロッセンさん、返信ありがとうございます。Spring 4について私が知っていることはすべてあなたから学びました:)
Firefox が実際には (完全に) 動作していません。websocket セッションを取得できません。xhr-streaming にダウングレードされます。xhr-streaming では問題はありませんが、本当の websocket セッションが必要です。
IE では、ヘッダーを削除すると何が確認されるのかわかりません。x フレーム ヘッダーは iframe セッションにのみ影響を与えていると思いましたが、まったく機能しません。必須の Cookie を無効にすると、IE は xdr-streaming を使用します (プリンシパルをフェッチする機能はありませんが、機能します)。Cookie を有効にすると、IE は適切に iframe を使用しようとします。ただし、ヘッダーが配置されていても、すべての試みは失敗します。
iframe-htmlfile と iframe-xhr-polling の両方が失敗します。私はIEでリフレッシュするたびにキャッシュをクリアし、SockJSでデバッグモードを有効にしています。IE で xdr-streaming を使用しても問題ありませんが、本当に jsessionid Cookie が必要です。
何かご意見は?
余談ですが、クライアント ライブラリ コードが相対パスをサポートしていれば非常に便利です (実際には相対パスを使用して html ファイルを作成し、動作するはずですが、ログにエラーが生成されます)。つまり、次のようになります。
これにより、本番環境へのデプロイの負担が軽減されます。
更新 2:
簡単な要約: 変化はありませんでした。
これは、セキュリティ設定で .headers().and() を使用して IE9 で接続しようとする試みです。
/info の要求ヘッダー:
および応答ヘッダー:
Firefox では違いはありませんでした。Websocket を開こうとすると、同じ奇妙な文字列エラーが発生し、xhr-streaming にフォールバックします。