Java netty连接

netty框架和mina框架都是出自一人之手,两个框架基本都差不多,netty通信发送接收报文都是通过channel 通道,而mina框架通信是使用session来读写报文,首先介绍建立客户端netty连接:
private EventLoopGroup group;
private Channel channel = null;
public Channel connect(InetSocketAddress socketAddress,final Master master) throws Exception{
group = new NioEventLoopGroup();

Bootstrap b = new Bootstrap();
try {
b.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.option(ChannelOption.SO_KEEPALIVE, true)
.handler(new ChannelInitializer<SocketChannel>(){
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();

//解码器
pipeline.addLast("decoder", new IecMessageDecoder());

//编码器
pipeline.addLast("encoder", new IecMessageEncoder());

//the logic handler
pipeline.addLast("handler", new IecClientHandler(master));

}

});
final ChannelFuture channelFuture = b.connect(socketAddress).sync();
channel = channelFuture.awaitUninterruptibly().channel();

return channel;
}catch(Throwable e){
log.error("connect the "+socketAddress+"error",e);
group.shutdownGracefully();
}
return null;
}
这是一个典型的netty连接,首先先声明一个Bootstrap 这个是连接的起点,然后绑定分组(并不知道有什么卵用),接着就是绑定handler,方法为创建一个Handler初始化类接着绑定Handler,可以绑定多个Handler最后是连接,通过连接获取Channel
建立服务器端过程差不多,只是Bootstrap要申明为ServerBootstrap 最后绑定端口即可:
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.DEBUG))//设置父类handler
.childHandler(new ModbusServerInitializer())//
.option(ChannelOption.SO_REUSEADDR, true)
.option(ChannelOption.TCP_NODELAY, true)
.option(ChannelOption.SO_KEEPALIVE, true)
.option(ChannelOption.SO_LINGER, 0)
.option(ChannelOption.SO_BACKLOG, 1500)//设置两队列大小
.option(ChannelOption.SO_RCVBUF, 1024 * 256)
.option(ChannelOption.SO_SNDBUF, 1024 * 256)
.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)//池化内存
.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
//绑定端口
b.bind(port).sync();
log.info("init modbus server complete");
} catch(Exception e){
log.error("init modbus server exception:",e);
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
接着无论是服务器端还是客户端都是在handler中接收消息,收到的消息都会经过handler中的receiveMessage方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值