[undertow-dev] HTTP/2.0 and SSE
Stuart Douglas
sdouglas at redhat.com
Fri Sep 4 19:11:24 EDT 2015
This does sound like a bug. If you file a JIRA I will look into it.
Stuart
----- Original Message -----
> From: "Cédric Tran-Xuan" <cedric.tranxuan at streamdata.io>
> To: undertow-dev at lists.jboss.org
> Sent: Friday, 4 September, 2015 10:47:38 PM
> Subject: [undertow-dev] HTTP/2.0 and SSE
>
> Hello,
> We are trying to use both SSE and HTTP/2.0 features of Undertow. The idea is
> to open an SSE connection with HTTP/2.0 as protocol.
> We've tried with the following piece of code:
>
> ____________________________________________
>
> ServerSentEventHandler sseHandler;
> sseHandler = new ServerSentEventHandler(new SseConnectionCallback(source));
>
> String bindAddress = System.getProperty("bind.address", "localhost");
> SSLContext sslContext = createSSLContext(loadKeyStore("server.keystore"),
> loadKeyStore("server.truststore"));
> Undertow server = Undertow.builder()
> .setServerOption(UndertowOptions.ENABLE_HTTP2, true)
> .setServerOption(UndertowOptions.ENABLE_SPDY, true)
> .addHttpsListener(8443, bindAddress, sslContext)
> .setHandler(path().addPrefixPath("/sse", sseHandler))
> .build();
>
> server.start();
> ____________________________________________
>
> But when connecting to https://localhost:8443/sse , nothing happens in the
> client side while we are sending into the ServerSentEventConnection data
> every 5 seconds
> We think it is related to the HTTP/2.0 frame stuff but we are not sure about
> this hypothesis.
> On the other hand, we have modified the ServerSentEventConnection to expose a
> flush() method that calls the underlying flush() of its sink.
>
> ____________________________________________
>
> public class ServerSentEventConnection implements Channel, Attachable {
>
> ...
>
> public boolean flush() throws IOException {
> return this.sink.flush();
> }
> }
>
> ____________________________________________
>
>
> And somewhere in our callback, we do:
>
> ____________________________________________
>
> public class SseConnectionCallback implements
> ServerSentEventConnectionCallback {
> ...
> if (connection.isOpen()) {
> connection.send(data, "data", UUID.randomUUID().toString(), new
> ServerSentEventConnection.EventCallback() {
> @Override
> public void done(ServerSentEventConnection aConnection, String aData, String
> aEvent, String aId) {
> LOGGER.info("Sent!");
> try {
> connection.flush();
> } catch (IOException e) {
> e.printStackTrace();
> }
> }
>
> @Override
> public void failed(ServerSentEventConnection aConnection, String aData,
> String aEvent, String aId, IOException e) {
> LOGGER.info("failed!");
> }
>
> });
> }
> ____________________________________________
>
>
> And we get the SSE events on the client side. So, we were wondering whether
> our solution was right or whether there is another solution for our issue.
>
> Thanks in advance!
> Best regards,
>
> Cédric.
>
>
>
>
> _______________________________________________
> undertow-dev mailing list
> undertow-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/undertow-dev
More information about the undertow-dev
mailing list