本文共 2450 字,大约阅读时间需要 8 分钟。
Netty 4/5 说明: 目前 http://netty.io/ 发布的最新版本号,但是并没有netty5相关的版本发布了
Netty3 模拟多连接的客户端
package xss.netty.netty3.client;import org.jboss.netty.bootstrap.ClientBootstrap;import org.jboss.netty.channel.*;import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;import org.jboss.netty.handler.codec.string.StringDecoder;import org.jboss.netty.handler.codec.string.StringEncoder;import xss.netty.netty3.HelloClientHandler;import java.net.InetSocketAddress;import java.util.Vector;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;/** * 多个连接的客户端 */public class ClientMutliChannel { //客户端连接服务类 ClientBootstrap clientBootstrap=new ClientBootstrap(); //会话列表// ListchannelList=new ArrayList (); Vector channels=new Vector (); //计数器 private final AtomicInteger index =new AtomicInteger(); /** * 初始化channel 的个数 * @param channelCount */ public void init(int channelCount){ ExecutorService worker = Executors.newCachedThreadPool(); ExecutorService boss = Executors.newCachedThreadPool(); //设置Thread Factory clientBootstrap.setFactory(new NioClientSocketChannelFactory(boss,worker)); //set pipe line factory clientBootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { ChannelPipeline channelPipeline= Channels.pipeline(); channelPipeline.addLast("decoder",new StringDecoder()); channelPipeline.addLast("encoder",new StringEncoder()); channelPipeline.addLast("hello",new HelloClientHandler()); return channelPipeline; } }); //connet to server for(int count=1;count = channels.size()){// 超出连接连接数的大小 throw new RuntimeException("没有可用的连接"); } return getActiveChannel(count+1);//尝试下一个 } return channel; } /** * 重连 * @param channel */ private void reconnect(Channel channel){ if(channels.indexOf(channel) == -1){ return; } Channel reconnetChannel=clientBootstrap.connect(new InetSocketAddress("127.0.0.1",9999)).getChannel(); channels.set(channels.indexOf(channel),reconnetChannel); }}
相关问题: 是不是线程安全的? 粘包/拆包的问题?
后续验证粘包与拆包的问题
转载地址:http://dwadi.baihongyu.com/