【问题标题】:dart: stop listening to a stream after given timedart:在给定时间后停止收听流
【发布时间】:2014-06-16 12:57:04
【问题描述】:

我有一个 Dart 服务器,它从 icecast 流中获取元数据。

要获取元数据,我有以下方法:

void getMetaData() {

    HttpClient client = new HttpClient();
    client.getUrl(Uri.parse(this.src))
    .then((HttpClientRequest request) {
        request.headers.add(HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36");
        request.headers.add("Icy-MetaData", "1");
        return request.close();
    })
    .then((HttpClientResponse response) {
        if(response.headers.value("icy-metaint") != null) {
            this.offset = int.parse(response.headers.value("icy-metaint"));
            //print(response.headers.toString());
            bool stop = false;
            List<int> metaData = new List();
            streamListener = response.listen(null);
            streamListener.onData((data) {
                while(!stop) {
                    if(data.length > 17000) { stop = true; }
                }
                metaData = data.getRange(offset, offset + data[offset]*16);
                String metaDataString = new String.fromCharCodes(metaData);
                print(metaDataString);
                streamListener.cancel();
            });
            streamListener.onError((e) {
                print(e);
            });
        }
    });
}

该方法按预期工作,直到流不返回任何数据或需要很长时间才能返回它。然后它就会停止工作。我假设该方法没有退出 while 循环。

这就是为什么我可能需要另一个条件来打破 while 循环。我认为计时器会很好,但我不知道如何实现计时器以在 5 秒左右后打破 while lopp。或者如果有更好的方法来获取数据。

任何帮助将不胜感激。

【问题讨论】:

    标签: timer stream dart icecast


    【解决方案1】:
    DateTime endTime = new DateTime.now().add(new Duration(milliseconds: 5000));
    
    while(!stop) {
      if(data.length > 17000 || new DateTime.now().compareTo(endTime) > 0) {
        stop = true;
      }
    }
    

    但你最好找到一种方法来做到这一点,而不需要这个繁忙的循环

    【讨论】:

    • 嘿 Günter,感谢您所有的飞镖答案,但这一个不起作用。我已经用 while(!isTimedOut) 和你在 while 循环前面的代码进行了尝试。由于无限的 while 循环,future 的回调永远不会执行。无限循环似乎阻塞了其他所有东西,甚至是 asnyc 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多