jooby/src/main/java/org/jooby/Sse.java
@Nonnull
  public Sse keepAlive(final long millis) {
    scheduler.schedule(new KeepAlive(this, millis), millis, TimeUnit.MILLISECONDS);
    return this;
  }
@Nonnull
  public Sse keepAlive(final long millis) {
    scheduler.schedule(new KeepAlive(this, millis), millis, TimeUnit.MILLISECONDS);
    return this;
  }
The keep alive time can be used to prevent connections from timing out:

<pre>{@code
{
sse("/events/:id", sse -> {
sse.keepAlive(15, TimeUnit.SECONDS);
});
}
}</pre>

<p>
The previous example will sent a <code>':'</code> message (empty comment) every 15 seconds to
keep the connection alive. If the client drop the connection, then the
{@link #onClose(Throwing.Runnable)} event will be fired it.
</p>

<p>
This feature is useful when you want to detect {@link #onClose(Throwing.Runnable)} events without
waiting until you send a new event. But for example, if your application already generate
events
every 15s, then the use of keep alive is useless and you should avoid it.
</p>

@param millis Keep alive time in millis.
@return This instance.