[英]Play Framework SSE Closing Chunked Response
我正在尝试在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,而仅涉及块。
由于play.mvc.Controller
不会让我知道执行过程中输出流是否关闭,因此我通过Producer
本身解决了该问题:
Producer.getNextMessage()
,会记住当前时间。 Producer.putMessage(String)
,检查自上次“获取”以来的时间。 如果大于某个阈值,则可以认为SSE通道已关闭。 还有一个类play.libs.F.EventStream
在Producer
很有用。
另外, Producer
在这里可能不是正确的名称,因为它更像是一个调度队列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.