繁体   English   中英

Play Framework SSE结束分块响应

[英]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本身解决了该问题:

  1. Producer.getNextMessage() ,会记住当前时间。
  2. Producer.putMessage(String) ,检查自上次“获取”以来的时间。 如果大于某个阈值,则可以认为SSE通道已关闭。

还有一个类play.libs.F.EventStreamProducer很有用。

另外, Producer在这里可能不是正确的名称,因为它更像是一个调度队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM