我正在使用分块编码将一些实时数据转发给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时是否有相应的方法来检测它?
由于
答案 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);
}
}
}
}
}