Предпосылки. Я использую Vert.x Core 3.3.3 и Web 3.3.3 на Java в качестве сервера EventBus, а Vert.x 2.0.0 и SockJS 1.1.1 на веб-клиент на Javascript для подключения к Java EventBus. Я подключен, могу отправлять и получать сообщения, и весь входящий и исходящий трафик открыт. Все работает исправно.
На стороне Java я добавляю SockJSHandler для обработки всего, что направлено на «/ eventbus / *», чтобы я мог обрабатывать события из соединений SockJS от клиентов JavaScript. Я могу правильно захватывать BridgeEventType, такие как BridgeEventType.REGISTER и UNREGISTER и SOCKET_CLOSED (за исключением одного экземпляра , отсюда и вопрос). Например, когда клиент подключается к EventBus, я могу видеть его хост и порт, а также адрес, по которому они зарегистрировали обработчик. Когда я обновляю или закрываю вкладку клиента JavaScript в веб-браузере, я также вижу события отмены регистрации или закрытия сокета. Все работает хорошо.
Проблема: я пытаюсь вручную завершить соединение EventBus или отменить регистрацию обработчика в клиенте JavaScript. Для этого я использую следующие команды:
(фон: переменная myEB определена как мое соединение vertx EventBus, myEB = new vertx.EventBus (link);, и это работает хорошо)
myEB.unregisterHandler (destination, handler); и myEB.close (); - это мои вызовы.
Попытки unregisterHandler и close НЕ запускают события UNREGISTER или SOCKET_CLOSED в обработчике SockJS Java EventBus.
Вопрос: Как мне вручную отменить регистрацию обработчика на клиенте JavaScript или отключиться от EventBus (закрыть соединение сокета), чтобы мой обработчик SockJS вызовет событие UNREGISTER или SOCKET_CLOSED?
РЕДАКТИРОВАТЬ 1: после некоторого тестирования кажется, что вызов close () в клиенте JavaScript запускает событие SOCKET_CLOSED. Вызов unregisterHandler () не запускает события UNREGISTER или SOCKET_CLOSED.