Это именно то, для чего предназначен HTTP-заголовок Last-Event-ID
в протокол SSE .
На стороне сервера вы должны искать этот заголовок при получении нового соединения. Если он установлен, немедленно передайте пропущенный им пробел данных. И вы должны установить для заголовка id
для каждого отправляемого сообщения какой-либо уникальный идентификатор.
На стороне клиента, для вашего конкретного случая использования, вам не нужно ничего делать: когда выполняется повторное подключение SSEон отправляет этот заголовок автоматически, используя идентификатор последних полученных данных.
В главе 5 моей книги «Приложения Data Push с HTML5 SSE» я утверждаю, что вы должны также включить этот же уникальный идентификатор, явно впакет данных JSON, который вы выдвигаете, и вы должны также поддерживать Last-Event-ID
, заданный в качестве аргумента POST / GET. Это дает вам гибкость для работы с альтернативными подходами к SSE с длительным опросом, а также означает, что он может работать, если переподключение было выполнено на стороне клиента, а не на стороне сервера. (Первый из них предназначен для поддержки старых браузеров, хотя это становится все менее важным по мере того, как IE вымирает; второй понадобится, если вы реализуете свой собственный механизм keep-alive.)