code: @Override
    public synchronized void close() {
      if (endHandler != null) {
        endHandler.handle(null);
      }
      closed = true;
      if (listener != null && handleCalled) {
        listener.sessionClosed();
      }
    }
docs: Yes, SockJS is weird, but it's hard to work out expected server behaviour when there's no spec