Вы не можете сказать, что соединение разорвано, пока не попробуете отправить что-то по соединению, и оно не сможет (бросает IOException
).
Я храню карту LinkedBlockingDeque
с (отображаемую по идентификатору внешней системы, принимающей живой поток) в одноэлементном EJB. Когда происходит какое-то событие, которое необходимо опубликовать в прямом эфире, я просто ставлю событие в очередь через этот синглтон-бин. На другом конце очереди - если он подключен - находится веб-служба JAX-RS, ожидающая, когда элемент станет доступным. Теперь причина, по которой я использую deque вместо очереди, заключается в том, что IOException
может быть выброшено при записи и / или очистке OutputStream
, что указывает на то, что клиент, скорее всего, отключился. С помощью очереди можно просто вернуть этот элемент, чтобы он был первым, который будет использован при следующем подключении внешней системы.