使用Netty发送和接收http报文中的一些注意事项

1 篇文章 0 订阅

使用Netty发送和接收http报文中的一些注意事项

近期看了一些《Netty实战》这本书,看完之后有些云里雾里的,就想写一个简单的http服务端和客户端感受一下,代码不多但是期间还是遇到了一些问题,这里把其中的一些坑记录下来。

Netty自带的编码器解码器

Netty为常用的网络协议准备了编/解码器,但是就像Netty中大多数组件都是有服务端与客户端的区别,编/解码器同样也存在这方面的差异,下面两个是Netty为HTTP准备的

HttpClientCodec //客户端用
HttpServerCodec //服务端用

当时由于copy代码没有注意,在客户端使用了HttpServerCodec,导致了在建立链接之后客户端迟迟没有发送报文(报文未发送的具体原因不明,信息似乎是卡在了HttpServerCodec这里)。

注意content-length

content-length是HTTP头部信息的一个字段,表明body的长度。在最初的代码中,忘记了给该字段赋值,导致服务端收到的FullHttpRequest实体中,content字段没有内容。可以使用以下方法为content-length赋值

request.headers().set(HttpHeaders.Names.CONTENT_LENGTH,request.content().readableBytes());
为HttpResponse设置content

可以通过构造器为FullHttpRequest设置content字段,但是HttpResponse没有类似的构造器。可以通过ChannelHandlerContext.write()方法直接写返回体

HttpResponse response = new DefaultHttpResponse(msg.getProtocolVersion(), HttpResponseStatus.OK);
response.headers().set(HttpHeaders.Names.CONTENT_TYPE,"text/html; charset=UTF-8");
ctx.write(response);
ctx.write(Unpooled.copiedBuffer("This is response", CharsetUtil.UTF_8));
//最后记得flush
ChannelFuture future = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
future.addListener(ChannelFutureListener.CLOSE);

以上是这次小试验发现的问题,以后有新发现会陆续补充。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值