首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭监听器或HttpRequest中的监听器

关闭监听器或HttpRequest中的监听器
EN

Stack Overflow用户
提问于 2012-08-21 03:45:05
回答 2查看 310关注 0票数 2

我看到使用nodejs可以在请求时添加侦听器:

代码语言:javascript
复制
req.addListener('close', .... );

但是我不知道如何处理Dart。我需要取消一个使用SourceEvent发送数据的计时器。如果不取消,它将在客户端断开连接时继续运行。

编辑:我添加我的用例

代码语言:javascript
复制
_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示例

EN

回答 2

Stack Overflow用户

发布于 2012-08-21 04:55:16

您可以向HttpClientConnection和response/requests数据流添加事件处理程序。如下所示:

代码语言:javascript
复制
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
    };
  }
};
票数 0
EN

Stack Overflow用户

发布于 2012-08-26 01:13:03

我还没有尝试过,但我能想到的最好的方法是使用inputStream:

代码语言:javascript
复制
request.inputStread.onClosed((_) => timer.cancel());

我同意Lars的观点,即使它可以工作,它也应该更容易找到,更明确。可能会想写个窃听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12044088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档