我看到nodejs可以在请求中添加一个监听器:
req.addListener('close', .... );
但是我找不到如何处理Dart。 我需要取消使用SourceEvent发送数据的计时器。如果不取消它,它会在客户端断开连接时继续运行。
编辑:我添加我的用例
_time(HttpRequest request, HttpResponse response) {
response.headers..set(HttpHeaders.CONTENT_TYPE, 'text/event-stream')
..set(HttpHeaders.CACHE_CONTROL, 'no-cache')
..set(HttpHeaders.CONNECTION, 'keep-alive');
var timer = new Timer.repeating(1000, (_){
Date now = new Date.now();
response.outputStream..writeString('data:${now.millisecondsSinceEpoch}\n\n');
});
// Here what I want to do
request.onClose((event) => timer.cancel();
}
我的请求是我的请求处理程序在url“/ time”上的经典http请求调用。我使用SourceEvent将时间推到客户端,它工作正常。
但是当客户关闭他的联系时我需要检测。搜索之后,如何做到这一点,发现许多带有nodejs的样本使用了这个req.addListener('close', ... )
答案 0 :(得分:0)
您可以向HttpClientConnection和响应/请求数据流添加事件处理程序。像这样:
var conn = httpClient.get(host, port, path);
conn.onResponse = (HttpClientResponse response) {
if(response.statusCode == 200) {
StringInputStream stream = new StringInputStream(response.inputStream);
StringBuffer body = new StringBuffer();
stream.onData = () => body.add(stream.read());
stream.onClosed = () {
// do something when its closed
};
}
};
答案 1 :(得分:0)
我没试过这个,但我能想到的最好的就是使用inputStream:
request.inputStread.onClosed((_) => timer.cancel());
我同意Lars的观点,即使它有效也应该更容易找到并更明确。可能想要提交错误。