2

nodejs を使用すると、リクエストにリスナーを追加できることがわかりました。

req.addListener('close', .... );

しかし、ダートの扱い方がわかりません。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 witch を使用した多くのサンプルを見つけましたreq.addListener('close', ... )

4

2 に答える 2

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
    };
  }
};
于 2012-08-20T20:55:15.527 に答える