Netty学习笔记之一(Netty解析简单的Http Post Json 请求)

时间:2023-03-10 03:16:32
Netty学习笔记之一(Netty解析简单的Http Post Json 请求)

一,HTTP解码器可能会将一个HTTP请求解析成多个消息对象。

 ch.pipeline().addLast(new HttpServerCodec());
ch.pipeline().addLast(new ParseRequestHandler());

经过HttpServerCodec解码之后,一个HTTP请求会导致:ParseRequestHandler的 channelRead()方法调用多次(测试时 "received message"输出了两次)

    @Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
System.out.println("received message");

可以用HttpObjectAggregator 将多个消息转换为单一的一个FullHttpRequest,如下:

 ch.pipeline().addLast(new HttpServerCodec());
ch.pipeline().addLast(new HttpObjectAggregator(65536));
ch.pipeline().addLast(new ParseRequestHandler());

此时,一个HTTP消息(Object msg)是下面这样的。

HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 17, cap: 17, components=1))
POST / HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: null
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
Cookie: _ga=GA1.1.457486782.1446782739
Connection: keep-alive

从上面可以看出,实体首部字段Content-Length是17,表明实体主体有17个字节。

而我发送的消息是这样的:

aaarticlea/png;base64,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15t1o9J/C127pZ1GEw153VjZuyJrBurycHZ9P9hQnomGosmlHCg000RDNZZGYRONlZu9NXHukuUnGtr7Ya6TTK7UDodjYGDg3Xff/eEPf1hRUWEwGO66667169f/5Cc/2bp168MPPyylwgaDobKy8te//vWFCxcmJiZW8hqqlts4GtqhxgqODJp6QIZ0Ny9orpTwYoaBRtpEQzNQSXVymS5V3ERDI6VRp0RpF0gMldSrpN0AAABYYbmMDDo5OXn06NFf/vKXGzduPHDgQFdX18DAwMWLF1988cUHHnhg9+7dGd4JEqdAv8MlBUo0er9/38yah/NcL33+VcLnFep4ZWzNwzNrds+mSjR8oZekjciLjbrXPDzz0uf/V3rk7u6tjSUa0u7kRGP2d/FHMtUpJxp5OK/e799XpomG3OZKehtJBo2rvCQacieMFU000v2iX+Y4Gkkl+6dlEo0EPp/P5XJduXLl3Xff3bJly7333itdN9euXbt+/fq77rpLSoUrKyt/+9vffvTRR+Pj48rxilbgGqqWovdQRtMaa2UaJZ1oJHyL042rmWKak8w3lDrOyPgvqQQTDc2zVq6XboG0OVPaPQAAgJWWS6Jht9v/+c9/vvLKK5s2baqtrf3b3/62Z8+epqamF198cePGje+//35vb292Wy7E73BJiScaY99fc+obd576xp2dBtXz3iuR+z5uu/8xlRhVJK34xfyRHON2yB0JKTJINO6XJ5QNHiPRUItrLUnDZOxPHFFD1Y0jZetqeYlGiY+jESfdP2UqX0/VIEuyu9XRrMjiku1yuRK7vUnkTm4fffRRhjNUFTLRSP4HovhOKx4nLpj45S6bRCPzUUFTbijD0Toy+UNakblOlnVc2ttKF0gonk0buqTdAwAAWGm5JBrT09Pnzp3buXPnfffdt3379l/96lc///nPn3/++aeeemrTpk179+69cuVK1hufzffvcEmhEo3vrZ+5+6HcyxsdsWLuv+/+4s7Y82Pf+51Nzibufmjm7v89q3qYrBIXaxTUXwCh639LC8cSjReVW6j84o66uciyY/58nGPv99aXbaIRm0gkWdMrYWqS+LbaMhONTOc6iUtdipNoRO8/T/Hvt/EznaSdETaLo9C3LC7Z0lc9rtubRO7kNj4+nuFltKCJhvz1VH07o1/ijGYwWfHZW5M9l9FdJ3Ff4xSh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" alt="" width="754" height="228" />

HTTP POST 请求,请求体是JSON格式的数据。这里使用的是json-lib解析的 Json字符串。代码如下:

    //parse job type 0,1
private String getJobType(FullHttpRequest request) throws IOException{
ByteBuf jsonBuf = request.content();
String jsonStr = jsonBuf.toString(CharsetUtil.UTF_8);
JSONObject jsonObj = JSONObject.fromObject(jsonStr);
String jobType = jsonObj.getString("jobType");
return jobType;
}

需要注意是:使用json-lib解析Json字符串时,需要其他的依赖包如下:

aaarticlea/png;base64,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" alt="" width="560" height="134" />

解析完成之后,需要把处理后的结果发送到下一个ChannelHandler,进行下一步的处理。

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
//do some process
.....
ctx.fireChannelRead(job);
}

注意,使用的是fireChannelRead()方法,而不是 ctx.writeAndFlush(...)。因为,writeAndFlush/write 是Outbound,它是把消息发送到上一个Handler,进而发送到remote peer,而这里是InBound。具体参考:

这里,通过 ctx.fireChannelRead(job); 将处理后的结果发送到下一个Channel处理。

 ch.pipeline().addLast(new HttpServerCodec());
ch.pipeline().addLast(new HttpObjectAggregator(2048));
ch.pipeline().addLast(new ParseRequestHandler());
ch.pipeline().addLast(new OozieRequestHandler());

下一个Handler是OozieRequestHandler,它负责向Oozie Server提交作业,之后返回jobId给客户端(HttpServerCodec  Handler 负责底层传输细节)。

Netty构造一个http 响应的方法如下:

String jobId = doPost(jobConfig);
FullHttpResponse response = new DefaultFullHttpResponse(
HttpVersion.HTTP_1_1, HttpResponseStatus.OK,
Unpooled.wrappedBuffer(jobId.getBytes())); response.headers().set(CONTENT_TYPE, "application/xml"); response.headers().setInt(CONTENT_LENGTH,
response.content().readableBytes());
ctx.write(response).addListener(ChannelFutureListener.CLOSE);

整个完整代码可参考:https://github.com/hapjin/netty_schedule