脚本宝典收集整理的这篇文章主要介绍了java-netty-study-2-netty 服务端,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Netty 服务端编写
1、bootStrap 部分
final Bootstrap bootstrap = new ServerBootstrap(); ExecutorService boss = Executors.newCachedThreadPool(); ExecutorService worker = Executors.newCachedThreadPool(); bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker)); bootstrap.setPiPElineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { final ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("decoder", new StringDecoder()); pipeline.addLast("encoder",new StringEncoder()); pipeline.addLast("messageHandler",new ServerHandler()); return pipeline; } }); ((ServerBootstrap) bootstrap).bind(new inetSocketAddress(10101));
代码说明
1.1 boss VS worker
-
boss和worker的线程
boss和worker 里面都是一个线程分配一个Selector。
-
boss和worker的功能
boss的功能主要是处理连接,worker的功能是Channel的读写
2、客户端部分
2.1 handler继承父类
2.2 Handler 常用方法说明
2.2.1 messageReceived
//1、接收数据 /* 没有StringDecoder时,显示字符串消息 final ChannelBuffer message = (ChannelBuffer) e.getMessage(); final byte[] array = message.array(); final String msg = new String(array); System.out.PRintln("message is :" + msg); */ //有StringDecoder System.out.println(e.getMessage()); //2、返回数据 //返回数据给客户端 /* 没有StringEnCoder final ChannelBuffer channelBuffer = ChannelBuffers.copiedBuffer("hi, i'm server".getBytes()); ctx.getChannel().wrITe(channelBuffer); */ //有StringEnCoder ctx.getChannel().write("hi, i'm server"); //3、抛出异常,看exceptionCaught 方法 //System.out.println(1/0); super.messageReceived(ctx, e)
代码说明
截图说明
Netty 中和客户端的数据传输有个上行和下行,UpStream,DownStream. 我们注意到Handler的父类中也同时继承了这两个类。
-功能1
接收客户端的数据
-功能2
返回数据给客户端
-功能3
可以在这个方法里监控一个客户端每秒发送了多少请求,避免恶意的客户端攻击。可以获取客户端ip,调用Channel的close方法关闭连接。
备注:
接收和返回数据异常,会调用exceptionCaught
2.2.2 exceptionCaught
- 功能1
messageReceived方法处理数据抛出异常,这个方法会调用
2.2.3 channelConnected
-
功能1
一个用户连接了,加载这个用户的相关数据到缓存中
2.2.4 channelDisconnected VS channelClosed
以上是脚本宝典为你收集整理的java-netty-study-2-netty 服务端全部内容,希望文章能够帮你解决java-netty-study-2-netty 服务端所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。