Jersey SSEクライアントを使用して、Node.jsサーバーからSSE(サーバー送信イベント)をストリーミングするための初歩的なJavaアプリケーションを作成しました。しかし、私はイベントを受け取ることができません。次のように予想されるように、サーバー・コンポーネントが動作していることを確認するために、私はcurl
を使用:Jersey SSEクライアントがイベントを受信していません
curl -v -H "Accept: text/event-stream" http://localhost:8080/events/
私は、次の応答を取得:
* Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> GET /events/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: text/event-stream
>
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: text/event-stream
< Cache-Control: no-cache
< Connection: keep-alive
< Date: Wed, 26 Apr 2017 17:12:00 GMT
< Transfer-Encoding: chunked
<
event: ping
data: 0.6637400726922664
event: ping
data: 0.8538157046725585
次のようにJavaでの私のSSEクライアントのコードは(Javaの8、ジャージークライアント1.19.3、ジャージーメディアSSE 2.25.1):
import org.glassfish.jersey.media.sse.EventListener;
import org.glassfish.jersey.media.sse.EventSource;
import org.glassfish.jersey.media.sse.InboundEvent;
import org.glassfish.jersey.media.sse.SseFeature;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
public class NodeCaptureSSE {
public static void main(String[] args) {
Client client = ClientBuilder.newBuilder().register(SseFeature.class).build();
WebTarget target = client.target("http://localhost:8080/events/");
EventSource eventSource = EventSource.target(target).build();
EventListener listener = new EventListener() {
@Override
public void onEvent(InboundEvent inboundEvent) {
System.out.println(inboundEvent.getName() + "; " + inboundEvent.readData(String.class));
}
};
eventSource.register(listener, "ping");
eventSource.open();
System.out.println("Connected to SSE source...");
try {
Thread.sleep(25_000);
}
catch (InterruptedException ie) {
System.err.println("Exception: " + ie.getMessage());
}
eventSource.close();
System.out.println("Closed connection to SSE source");
}
}
私は画面に表示される唯一の出力は、次のとおりです。
Connected to SSE source...
その後、25秒後に終了する。サーバーはイベント( "ping")という名前のストリーミングを行っているので、リスナーをイベントソースに登録する際に指定しました。 eventSource.register(...);
に2番目のパラメータを省略すると、私はそれを期待していませんでしたが、何もしませんでした。 URL内の/
も削除しましたが、期待通りに404 Not Found
になります。正しい方向に指針を得ることを願っています。
Jersey sse clientはブラウザのように動作しますか?長い間接続を開いたままにする方法はありますか? –