>> Тю. Вообще бесполезная система. Исходящие-то соединения я и через Ajax наваяю.
> Под Ajax подразумевается XHR? Ну наваяй через него банальный чат реального времени
> без долбёжки сервера постоянным опросомДолбёжка постоянным опросом - это, конечно, нехорошо.
Но я в браузере запускаю:
let eventSource = new EventSource("урл_к_моему_cgi_скрипту");
и после этого браузер держит с моим cgi-скриптом постоянный канал связи и даже переустанавливает его сам, если канал разрывался.
А серверный cgi-скрипт каждые N секунд шлёт в этот канал данные:
Вот пример, в котором серверный cgi-скрипт ежесекундно секунд шлёт в браузер номер пакета и его время, а через 5 пакетов завершает свою работу, закрывая тем самым канал:
Серверный Perl:
foreach my $num (1..5) {
my $t = time();
print "data: num = $num, t = $t<BR>\n";
sleep 1;
};
print "data: <HR>\n\n";
Браузерный JavaScript:
let eventSource = new EventSource("урл_к_моему_cgi_скрипту");eventSource.onmessage = function(event) {
console.log(event.data);
if (а не закрыть ли нам канал?) {
// а закрыть!
eventSource.close()
} else {
// а не надо! :-)
// NOOP
}
}
Браузер-то потом автоматически переоткрывает этот канал повторным запросом к cgi-скрипту, если в браузерном JavaScript не остановить автоматической восстановление канала, когда он уже не нужен:
Это простейший пример - отправка в браузер пакета ежесекундно. А можно ж не ежескундно, а по другим условиям - например, когда пакет сформировался - хоть через час, хоть через сутки, хоть через месяц, год, век.
>> Входящие нужны!
> Зачем? Закладываться на наличие у пользователя белого IP (ещё и не порезанного
> межсетевым экраном провайдера или работодателя) — уже давно безумие.
Вот зачем:
Мне нужно отправить юзеру пакет.
Обычно это в браузерах 30 лет делают так:
Браузер шлёт пакет на сервер, а получатель пакета в другом браузере получает этот пакет с сервера.
Но сервер же может отвалиться. Может отвалиться даже кластер серверов. И когда не останется ни одного доступного сервера-посредника, тогда надо иметь возможность отправить пакет из браузера в браузер напрямую без посредников в виде веб-серверов. А если такая возможность будет, то веб-серверы для межбраузерного обмена информацией будут и не нужны (кроме начальных этапов типа построения в браузерах таблиц/списков других браузеров, готовых участвовать в межбраузерном обмене пакетами).