我正在尝试在Play Framework 1.2.5中实现服务器端事件服务器
我怎么知道客户端是否调用了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()
,但没有任何异常。
在http://www.playframework.com/documentation/1.2.5/asynchronous#HTTPresponsestreaming有一个类似的示例不处理 SSE,而只处理块