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