今天遇到了一个广告网络比较现实的需求,如下:
最为一个广告服务端,可以从publisher的app接收到很多的加载广告的请求。。。这个时候可以将这些请求的数据发给一些中间的机构(exchange),然后由他们返回广告的数据。。。因为请求量较大,而且要保证延迟不能太高,所以这里与这些中间机构进行通信的时候就只能采用长连接的方式了,不能每次请求都生成一次连接来进行http请求。。。
其实以前一般用netty开发都是作为服务端来的,很少用作客户端。。。在网上找了一下代码,好像找不到类似立马可以用的,没办法了,只有自己写一个了。。。还好自己对netty还算是比较熟。。。大致思路如下:
(1)创建一个eventLoopGroup,用于维护nio的io事件
(2)创建一个niosocketchanel,然后将其注册到eventLoopGroup上面去,并未channel设置初始化的handler
(3)调用channel的connect方法发起与远端的连接请求
(4)当链接建立以后,刚刚提到的初始化handler将会用于响应,为channel添加http的decode与encode的handler。。
(5)最后就可以开始进行http通信了。。
当然这里就不要主动的去断开channel了,断开还是让对方的服务器去做吧,或者超时,或者什么的。。反正客户端不会主动断开。。。
其实只要上面的步骤想出来,接下来写代码用netty来实现一个基于长连接的http客户端还算是很简单 的。。直接上代码吧:
package fjs;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent