资讯专栏INFORMATION COLUMN

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

jsliang / 2164人阅读

摘要:服务端编写部分代码说明和的线程和里面都是一个线程分配一个。功能接收客户端的数据功能返回数据给客户端功能可以在这个方法里监控一个客户端每秒发送了多少请求,避免恶意的客户端攻击。

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)

代码说明

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


截图说明
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)中,当玩家下线了,这两个方法调用,那么清空缓存中的数据。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71899.html

相关文章

  • java-netty-study-2-netty 客户

    Netty 客户端 1、Code 代码:https://github.com/chengbingh... 服务类 线程池 socket 工厂 管道工厂 连接服务端 发送数据

    JouyPub 评论0 收藏0
  • React 服务渲染完美的解决方案

    摘要:服务端渲染两种方式根据上文介绍对服务端渲染利弊有所了解,我们可以根据利弊权衡取舍,最近在做服务端渲染的项目,找到多种服务端渲染解决方案,大致分为两类。第一种方式传统方式服务端渲染,解决用户体验和更好的,有诸多工具使用这种方式如的的等。 最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法。在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权...

    DesGemini 评论0 收藏0
  • React同构直出优化总结

    摘要:同构的关键要素完善的属性及生命周期与客户端的时机是同构的关键。的一致性在前后端渲染相同的,将输出一致的结构。以上便是在同构服务端渲染的提供的基础条件。可以将封装至的中,在服务端上生成随机数并传入到这个中,从而保证随机数在客户端和服务端一致。 原文地址 React 的实践从去年在 PC QQ家校群开始,由于 PC 上的网络及环境都相当好,所以在使用时可谓一帆风顺,偶尔遇到点小磕绊,也能够...

    alaege 评论0 收藏0
  • 干货实例:什么是React服务渲染?

    摘要:今天分享一篇公司大佬的文章,非常厉害的大神崇拜脸,讲讲服务端渲染。服务端渲染,它到底用了什么原理呢服务端渲染原理服务端渲染的方式有很多,主流的服务端语言为使用渲染。 富婆来报道,今天想问题想不出来,随手抓了一下头发,没想到啊没想到,我那浓(mei)密(sheng)茂(ji)盛(gen)的秀发又少了好几根,一定要改掉这个想不出来问题就揪头发的坏习惯。今天分享一篇公司大佬的文章,非常厉害的...

    Jason_Geng 评论0 收藏0
  • 【翻译】Web渲染概述

    摘要:由我所在的团队共同翻译完成,并发布在前端技术公众号方凳雅集上,转载于此。在移动端,客户端渲染很难获得并保持一个较快的渲染速度。使用技术进行服务端渲染的主要问题在于它会对可交互时间有明显的负面影响,尽管它缩短了首次绘制时间 本文简单介绍了web应用各种渲染方案,其中包括客户端渲染、服务器端渲染等各种渲染方案。文章翻译自:https://developers.google.com...。由...

    RobinQu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<