| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
moko 11.10 23:49 / 15.10 02:09
В парсер добавлен метод ^response:stream[строка или файл]. Он позволяет отправлять клиенту ответ по частям, не дожидаясь конца работы скрипта. Например:$response:content-type[ $.value[text/plain] $.charset[utf-8] ] ^response:stream[первая часть ...] ^sleep(1) ^response:stream[вторая часть ...]Как это работает:
event: имя id: 5 data: строка 1 data: строка 2Событие заканчивается пустой строкой. Передавать можно только текст в UTF-8. Для использования в парсере нет необходимости в отдельном классе: достаточно небольшого метода поверх ^response:stream[]. Пример реализации доступен в тесте 467, там меньше страницы кода.
^sse[ $.event[json] $.data[^json:string[ $.text[привет] $.login[user] ]] ]уйдёт клиенту как
event: json
data: {
data: "text":"привет",
data: "login":"user"
data: }Многострочную data браузер склеит сам, поэтому такой JSON разбирается как обычно.const es = new EventSource('/events.html');
// событие с именем json
es.addEventListener('json', (e) => {
const msg = JSON.parse(e.data);
console.log(msg.text, msg.login);
});
// события без поля event
es.onmessage = (e) => console.log(e.data);
es.onerror = () => console.log('соединение потеряно, браузер переподключится сам');EventSource переподключается автоматически. Пауза между попытками задаётся событием retry: 3000 (миллисекунды). Если у событий есть id, при переподключении браузер отправит его в заголовке Last-Event-ID, и скрипт сможет продолжить с нужного места.