Play Framework 2:处理分块响应中的客户端断开连接

时间:2013-09-09 08:15:31

标签: java asynchronous playframework playframework-2.1 chunked-encoding

我正在使用分块编码将一些实时数据转发给Web客户端。

通过以下方式,我可以制作HTTP流媒体响应,

public Result action() {
    return ok(new StringChunks() {
        public void onReady(final Out<String> out) {
            openStream().onData(new Consumer<String>() {
                public void accept(String string) {
                    out.write(string);
                }
            }
        }
    }
}

但是我需要在客户端断开连接后清理一些资源。 (例如关闭浏览器窗口或当流达到EOF时)

使用WebSocket时,我可以使用Iteratee。mapDone检测客户端断开连接。

使用Chunks时是否有相应的方法来检测它?

由于

1 个答案:

答案 0 :(得分:0)

好吧,只是想通了。

Results.Chunked.Out<A>对象具有onDisconnected(Callback0)方法,我可以注册断开连接回调。所以

public Result action() {
    return ok(new StringChunks() {
        public void onReady(final Out<String> out) {
            out.onDisconnected(new F.Callback0() {
                public void invoke() throws Throwable {
                    // clean up things ...
                }
            }
            openStream().onData(new Consumer<String>() {
                public void accept(String string) {
                    out.write(string);
                }
            }
        }
    }
}