如何从HTTP响应中获取String以形成另一个请求Netty 4.0.10

时间:2013-10-24 22:08:46

标签: java netty

我是Netty的新手,并不是非常精通Java,我正在尝试建立一个连接并从Wowza下载HLS流的客户端。 我的目标不是查看视频,而是能够为Wowza服务器提供的HLS流进行压力测试而建立多个同时连接。

我一直在使用HttpSnoopClient示例作为起点,示例客户端成功连接并从作为参数提供的网址(wowza-server/stream-name/playlist.m3u8)下载播放列表内容。现在,我必须使用原始URI形成一个新的连接/请求,并将playlist.m3u8替换为我正在解析的接收响应的一部分(类似chunklistxxxx.m3u8)。之后,我需要处理该响应,该响应将为我提供视频文件的链接,并形成新的连续连接/请求以下载这些文件。下载完成后,将重复该过程以获取新块。

我的问题是:如何从String将已处理的HttpSnoopClientHandler返回到主类,以便我可以建立新连接?

1 个答案:

答案 0 :(得分:0)

通常,您可以在HttpSnoopClientHandler中定义成员字段:

class HttpSnoopClientHandler ... {
    final BlockingQueue<String> content = new LinkedBlockingQueue<>();
    final StringBuilder contentBuffer = new StringBuilder(...);

    public void channelRead0(...) {
        // On every HttpContent:
        contentBuffer.append(...);

        // On LastHttpContent:
        content.add(contentBuffer.toString());
        contentBuffer.setLength(0);
    }
}

然后,您可以从content班级获取Main

HttpSnoopClientHandler h = channel.pipeline().get(HttpSnoopClientHandler.class);
String content = h.content.poll(timeout, timeUnit);