まず、与えられた状況を説明しましょう。春のブートアプリケーションで長いポーリングを処理するには、nginxで負荷分散しますか?
私は角度のあるJavaScriptのフロントエンドを持っています。私はウェブソケットを使う必要があるので、私は "sockjs"と "stomp-websocket"を使います。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/dummy");
registry.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry
.addEndpoint("/stomp")
.setAllowedOrigins("*")
.withSockJS()
.setSessionCookieNeeded(false);
}
}
この設定は何の問題もなく動作します。
var socket,
client;
socket = new SockJS('http://localhost:8080/stomp');
client = Stomp.over(socket);
client.connect({}, function() {
client.subscribe('/dummy/message', function (message) {
console.log('subscribed');
}
});
私のバックエンドは、春のブートアプリケーションです。 FirefoxでWebSocketを無効にしても、問題なく動作します(このシナリオではフォールバックが機能します)。
バックエンドのインスタンスをさらに起動してnginxを使用すると、問題が発生します。
私のnginxの設定は次のとおりです。私は複数のバックエンドで、この設定を使用する場合が、を意図したとおり
upstream ws_be {
server localhost:8081;
server localhost:8082;
}
server {
listen 8080;
location/{
proxy_pass http://ws_be;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
は、WebSocketをまだ私は私のブラウザでWebSocketをを無効にした場合のフォールバックはもう動作しません動作します。それは単に接続を維持し、即座に切断します。ブラウザのコンソールで
エラー:私はnginxのか、私を設定する必要がどのように私は見当がつかない。この時点で
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Datenübergabe unterbrochen (broken pipe)
:私はIO壊れたパイプのエラーを取得するバックエンドで
Opening Web Socket... stomp.min.js:8:1893
Web Socket Opened... stomp.min.js:8:1893
>>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000
<<< CONNECTED
version:1.1
heart-beat:0,0
connected to server undefined stomp.min.js:8:1893
>>> SUBSCRIBE
id:sub-0
destination:/dummy/message
Whoops! Lost connection to undefined
特定のセットアップで正しく動作するようにバックエンドを設定します。 誰かにこの問題のアイデアやヒントがあることを願っています。
ブラウザでどのトランスポートが選択されているのか、またネットワークタブではどのようなエラーメッセージが表示されるのでしょうか? –
これは、次の4つの要求を繰り返し続けます。 - GET http:// localhost:8080/stomp/info - > Status 200 - POST http:// localhost:8080/stomp/101/x_bobkwk/xhr_streaming - > Status 200 Aboted - POST http:// localhost:8080/stomp/101/x_bobkwk/xhr_send - >ステータス204 - POST http:// localhost:8080/stomp/101/x_bobkwk/xhr_send - >ステータス404 – Vadim
その場合は、おそらくこれに関連する? https://serverfault.com/questions/789417/should-proxy-buffering-be-disabled-in-nginx-to-support-sockjs-xhr-streaming –