Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在使用Netty的HTTP处理程序之后解码重复传入的字节消息?_Java_Netty_Icecast - Fatal编程技术网

Java 如何在使用Netty的HTTP处理程序之后解码重复传入的字节消息?

Java 如何在使用Netty的HTTP处理程序之后解码重复传入的字节消息?,java,netty,icecast,Java,Netty,Icecast,我正在使用Icecast的特性添加一条包含流的当前元数据的消息。它通过以下标题启用: request.headers().set("Icy-MetaData", "1"); 在此之后,在HTTP响应中有一个包含间隔的标头,该标头定义服务器在正常流内容的x字节之后再次发送元数据。此外,我希望在元数据标记之间存储流内容 我现在的问题是,实现这一目标的最佳方式是什么?一个想法是使用ByteToMessageDecoder来“过滤”元数据标记,但字节已经解码为HttpObject。我当前的处理程序如下

我正在使用Icecast的特性添加一条包含流的当前元数据的消息。它通过以下标题启用:

request.headers().set("Icy-MetaData", "1");
在此之后,在HTTP响应中有一个包含间隔的标头,该标头定义服务器在正常流内容的
x
字节之后再次发送元数据。此外,我希望在元数据标记之间存储流内容

我现在的问题是,实现这一目标的最佳方式是什么?一个想法是使用
ByteToMessageDecoder
来“过滤”元数据标记,但字节已经解码为
HttpObject
。我当前的处理程序如下所示:

public class StreamClientHandler extends SimpleChannelInboundHandler<HttpObject> {


    private int metadataInterval = 0;

    @Override
    protected void messageReceived(ChannelHandlerContext handlerContext, HttpObject message) throws Exception {

        if(message instanceof HttpResponse) {
            HttpResponse response = (HttpResponse) message;
            this.metadataInterval = Integer.parseInt(response.headers().get("icy-metaint").toString());
        }

        if(message instanceof HttpContent) {

            HttpContent content = (HttpContent) message;



            if(content instanceof LastHttpContent) {
                // Close connection
                handlerContext.channel().close();
            }
        }
    }
}
公共类StreamClientHandler扩展了SimpleChannelInboundHandler{
私有int metadataInterval=0;
@凌驾
已收到受保护的void messageReceived(ChannelHandlerContext handlerContext,HttpObject message)引发异常{
if(HttpResponse的消息实例){
HttpResponse响应=(HttpResponse)消息;
this.metadataInterval=Integer.parseInt(response.headers().get(“icy metaint”).toString());
}
if(HttpContent的消息实例){
HttpContent=(HttpContent)消息;
if(LastHttpContent的内容实例){
//密切联系
handlerContext.channel().close();
}
}
}
}
谢谢大家!