我看到使用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将时间推送到客户端,它工作得很好。但我需要侦测客户何时关闭他的连接。经过搜索,发现了许多使用此req.addListener('close', ... )的nodejs示例
发布于 2012-08-21 04:55:16
您可以向HttpClientConnection和response/requests数据流添加事件处理程序。如下所示:
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
};
}
};发布于 2012-08-26 01:13:03
我还没有尝试过,但我能想到的最好的方法是使用inputStream:
request.inputStread.onClosed((_) => timer.cancel());我同意Lars的观点,即使它可以工作,它也应该更容易找到,更明确。可能会想写个窃听器。
https://stackoverflow.com/questions/12044088
复制相似问题