Я пытаюсь реализовать на стороне сервера События сервера в Play Framework 1.2.5Play Framework SSE Закрытие Chunked Ответ
Как я могу знать, если клиент называется EventSource.close()
(или закрыл окно браузера, например)? Это упрощенная часть кода сервера я использую:
public class SSE extends Controller {
public static void updater() {
response.contentType = "text/event-stream";
response.encoding = "UTF-8";
response.status = 200;
response.chunked = true;
while (true) {
Promise<String> promise = Producer.getNextMessage();
String msg = await(promise);
response.writeChunk("data: " + msg + "\n\n");
}
}
}
Producer
должны иметь дело с очередями, Promise
объектов, и производить вывод, но я должен знать, когда, чтобы остановить его (заполнение его очереди). Я бы ожидал, что какое-то исключение выбрано response.writeChunk()
, если выходной поток закрыт, но его нет.
Там очень похожий пример, который не имеет дело с SSE, но только кусками, а не на http://www.playframework.com/documentation/1.2.5/asynchronous#HTTPresponsestreaming