java-netty-study-2-netty 服务端

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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继承父类

java-netty-study-2-netty 服务端

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)

代码说明

  • 关于StringEncoder,和StringDecoder
    在Server中添加了上述的encoder和decoder,我们就可以直接接收和返回String类型的数据给客户端。看类的继承关系:

java-netty-study-2-netty 服务端


截图说明
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

  • 功能1

    比如做游戏,一个玩家上线了,建立连接,我们就要把玩家的一些数据读取到缓存(redis/memcached)中,当玩家下线了,这两个方法调用,那么清空缓存中的数据。 

脚本宝典总结

以上是脚本宝典为你收集整理的java-netty-study-2-netty 服务端全部内容,希望文章能够帮你解决java-netty-study-2-netty 服务端所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。