基于netty实现单聊、群聊功能
学习资料
https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b6a1a9cf265da0f87595521
收获:
转载
1. Netty 是什么? 经过我们整个小册的学习,我们可以了解到,Netty 其实可以看做是对 BIO 和 NIO 的封装,并提供良好的 IO 读写相关的 API,另外还提供了非常多的开箱即用的 handler,工具类等等。
2. 服务端和客户端启动 Netty 提供了两大启动辅助类,ServerBootstrap 和 Bootstrap, 他们的启动参数类似,都是分为 配置 IO 类型,配置线程模型。 配置 TCP 参数,attr 属性。 配置 handler。server 端除了配置 handler,还需要配置 childHandler,他是定义每条连接的处理器。
3. ByteBuf 接着,我们又学习了 Netty 对二进制数据的抽象类 ByteBuf,ByteBuf 底层又可以细分为堆内存和堆外内存,它的 API 要比 jdk 提供的 ByteBuffer 要更好用,ByteBuf 所有的操作其实都是基于读指针和写指针来进行操作的,把申请到的一块内存划分为可读区、可写区,另外还提供了自动扩容的功能。
4. 自定义协议拆包与编解码 通常,我们要实现客户端与服务端的通信,需要自定义协议,说白了就是双方商量在字节流里面,对应位置的字节段分别表示什么含义。 我们用的最多的协议呢就是基于长度的协议,一个协议数据包里面包含了一个长度字段,我们在解析的时候,首先第一步就是从字节流里面根据自定义协议截取出一个个数据包,使用的最多的拆包器就是 LengthFieldBasedFrameDecoder,只需要给他配置一些参数,即可实现自动拆包。 拆包之后呢,我们就拿到了代表字节流区段的一个个 ByteBuf,我们的解码器的作用就是把这些个 ByteBuf 变成一个个 java 对象,这样我们后续的 handler 就可以进行相应的逻辑的处理。
5. handler 与 pipeline Netty 对逻辑处理流的处理其实和 TCP 协议栈的思路非常类似,分为输入和输出,也就是 inBound 和 outBound 类型的 handler,inBound 类 handler 的添加顺序与事件传播的顺序相同,而 outBound 类 handler 的添加顺序与事件传播的顺序相反,这里一定要注意。 无状态的 handler 可以改造为单例模式,但是千万记得要加 @ChannelHandler.Sharable 注... https://juejin.im 掘金 — 一个帮助开发者成长的社区
需要掌握的东西有以下
netty的整体架构:
线程模型:主从reactor模型
https://mrdear.cn/2018/08/07/framework/netty/netty--reactor_model/
netty的核心组件:
- Channel:表示客户端与服务端建立起的连接通道
- EventLoop:不断的循环多路复用器中事件的一个Reactor线程,对于NIO多路复用器则为
java.nio.channels.Selector - ChannelPipeline:业务逻辑执行链封装,比如对消息的decode,compute,encode等
这三个实现也是Netty线程模型的核心,接下来逐一分析。
不同场景的可解决方案:
基于netty实现单聊、群聊功能的更多相关文章
- Flask(4)- flask请求上下文源码解读、http聊天室单聊/群聊(基于gevent-websocket)
一.flask请求上下文源码解读 通过上篇源码分析,我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__call__方法返回了app的wsgi_app(en ...
- spring websocket 和socketjs实现单聊群聊,广播的消息推送详解
spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...
- 基于websocket的单聊.群聊
关于ai.baidu.com的 代码: #########################################核心代码################################### ...
- websocket 实现单聊群聊 以及 握手原理+加密方式
WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...
- 基于ejabberd简单实现xmpp群聊离线消息
首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact: 修改后实现群聊离线 ...
- Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊
分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...
- 从零一起学Spring Boot之LayIM项目长成记(六)单聊群聊的实现
文章传送门: https://my.oschina.net/panzi1/blog/1577007 并没有放弃博客园,只是 t-io 在 oschina发展.用了人家的框架,也得帮人家做做宣传是吧~~
- 基于jQuery表单快速录入数据功能
一.功能介绍:完全依靠jQuery,表单table新增行(按键盘tab增一行,按esc删一行),也可以加一个新增行按钮点击新增多行,这里就不多说了~~ 二.该功能主要实现技术: 1,总体.NET MV ...
随机推荐
- 第六节,TensorFlow编程基础案例-保存和恢复模型(中)
在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...
- plsql界面/command界面
存储过程执行CALL PRO_DELETE_OND_FOR_ORDERNO('120000000208'); --在PLSQL的SQL窗口执行 EXEC PRO_DELETE_OND_FOR_O ...
- 关键字(4):grant授权/revoke回收权限
单表授权 grant select , insert, update, delete on 表名 to 被授权用户名; grant select , insert, update, delete, r ...
- css: position的使用;
position有四种模式: static, relative, position, fixed; 1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, ...
- NoClassDefFoundError com/google/inject/Injector
一个maven项目莫名其妙的遇上了NoClassDefFoundError com/google/inject/Injector,在maven-surefire-plugin插件中配置 了<fo ...
- Hbase运维手册(1)
1. region情况 需要检查 1. region的数量(总数和每台regionserver上的region数) 2. region的大小 如果发现异常可以通过手动merge region和手动分配 ...
- JAVA核心技术I---JAVA基础知识(知识回顾)
一:多态问题 class Father { public void hello() { System.out.println("Father says hello."); } } ...
- 设计模式---行为变化模式之命令模式(Command)
前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...
- 设计模式---对象性能模式之享元模式(Flyweight)
一:概念 通过与其他类似对象共享数据来减少内存占用 如果一个应用程序使用了太多的对象, 就会造成很大的存储开销. 特别是对于大量轻量级 (细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字 ...
- Linux-CentOS 查看(监控)服务器网卡流量
1.使用系统自带的命令: watch more /proc/net/dev 2. 使用nload命令,需要自行安装 1)# yum install flex byacc libpcap ncurses ...