本月博客排行
-
第1名
龙儿筝 -
第2名
lerf -
第3名
fantaxy025025 - johnsmith9th
- xiangjie88
- zysnba
年度博客排行
-
第1名
青否云后端云 -
第2名
宏天软件 -
第3名
gashero - wy_19921005
- vipbooks
- benladeng5225
- e_e
- wallimn
- javashop
- ranbuijj
- fantaxy025025
- jickcai
- gengyun12
- zw7534313
- qepwqnp
- 解宜然
- ssydxa219
- zysnba
- sam123456gz
- sichunli_030
- arpenker
- tanling8334
- gaojingsong
- kaizi1992
- xpenxpen
- 龙儿筝
- jh108020
- wiseboyloves
- ganxueyun
- xyuma
- xiangjie88
- wangchen.ily
- Jameslyy
- luxurioust
- lemonhandsome
- mengjichen
- jbosscn
- zxq_2017
- lzyfn123
- nychen2000
- forestqqqq
- wjianwei666
- ajinn
- zhanjia
- Xeden
- hanbaohong
- java-007
- 喧嚣求静
- mwhgJava
- kingwell.leng
最新文章列表
基于netty的通讯协议的设计思考
# 一、dubbo协议的设计
先从业务开始,思考设计协议。
## 1. 从rpc到remote
dubbo的目标是:一个接口方法的动态实现了远程方法调用,让调用者感觉与本地调用一样。既然是远程调用,涉及到用什么协议把调用数据发过去,以及接收方按这个协议解析出请求,进行处理后,用这个协议再返回结果。
对于rpc要做的事情有:
- 调用方要做的事情有:产生一个包含调用数据的Dubbo ...
netty心跳检查之UDP篇
部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终端的状态,并获取终端IP,以便服务器主动发送控制命令。如移动通信,内网穿越等。
使用TCP方式通信,心跳是比较容易实现的,使用IdleStateHandler监控channel,然后在自定义的Handler中处理几个对应的事件就可以了。但是对于UDP,就不灵了。
学习研究netty,做了一个简单而完善的例子:通过UDP通信,客户 ...
Netty 引用计数对象
相关链接:
《Reference counted objects》
《Why do we need to manually handle reference counting for Netty ByteBuf if JVM GC is still in place?》
《Are Java DirectByteBuffer wrappers garbage collected?》
一 ...
Java NIO epoll 空转问题 + Netty 解决方法
在 Java NIO 编程实践中,很多人都会选择 Netty 作为基础框架,而不是直接用 JDK 原生的 NIO API。 因为 JDK 原生的 NIO 框架内容过于繁杂、学习成本高、补齐可靠性的工作量和难度都很大、还有一些bug。 其中一个著名的bug就是 epoll Selector 空转问题。
相关Bug单
《JDK-6670302 : (se) NIO selector wa ...
Reator 模式 + Netty 线程模型 + 最佳实践建议
Reactor 模式
大部分网络框架的设计都基于 Reactor 模式。 这种模式基于事件驱动,特别适合处理大量的 IO 事件。
根据线程数量,我们可以将 Reactor 模式大致分为以下3种(以服务端实现为例):
单线程 Reactor
单个 Reactor 线程负责对TCP链路读写数据和编解码(包括执行业务逻辑)。 (很多人把该模式称为 “1 - 1”。其实这种称呼并不贴 ...
Netty 简介 - 高性能原理 + 关键组件模型
Netty > java.nio + java.net
Netty 是一个 NIO 框架。 它的设计强调了“分离关注点”(Separation Of Concerns)。 它通过事件机制,将业务逻辑与无关的技术逻辑隔离,通过抽象层填补 基础平台 和 业务开发 之间的鸿沟。Netty 极大地简化了网络编程(如,TCP/UDP socket 服务器)。可以利用它更快速容易地开发网络 ...
Netty内存池原理分析
为了避免频繁的内存分配给系统带来负担以及GC对系统性能带来波动,Netty4提出了全新的内存管理,使用了全新的内存池来管理内存的分配和回收。内存池这块的代码复杂难懂,而且几乎没有注释阅读起来比较费力,特别是以前没有接触过内存分配算法的阅读起来更为蛋疼,好在经过几个晚上的努力,终于捋出了一些端倪,特来此记录一番。
Netty4的内存池集大家之精华,参考了各路英雄豪杰的优秀思想,它参考了sl ...
深入研究Netty框架之ByteBuf功能原理及源码分析
ByteBuf功能原理
ByteBuf是一个byte数组的缓冲区,通过两个位置指针完成缓冲区的读写操作,读操作使用readerIndex,写操作使用writeIndex。
readerIndex和writeIndex初始取值均为0,写入数据,writeIndex增加;读取数据则readerIndex增加。0~readerIndex之间的数据是已经读取的,调用discardReadBytes( ...
Netty 读事件的处理
1.首先 bossLoop Accept 客户端的连接.
2.bossLoop 创建 NioSocketChannel,并完成对读事件的注册.
3.当客户端发送消息的时候,被 NioSocketChannel 处理.
netty自定义解码器
ByteToMessageDecoder
public class CustomDecoder extends ByteToMessageDecoder {
protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> list) throws Exception {
try { ...
netty发送定长字符串
使用telnet连接netty:发送定长字符串
//1、启动Server,输入telnet命令:telnet localhost 8088
public class NettyServer {
private int port=8088;
public static void main(String[] args) {
NettyServer server = new NettyServ ...
分隔符与定长解码器的使用
netty 的分隔符与定长解码器的使用
4种解码器应对TCP的粘包、拆包问题
new ChannelInitializer<SocketChannel>() {
public void initChannel(SocketChannel ch) {
ChannelPipeline pl = ch.pipeline();
//pl.addLast(new Li ...
netty客户端发送消息
netty客户端与服务端通信
/**
* 先启动Server,再启动Client
* SimpleChannelInboundHandler
*/
public class NettyServer {
private int port=8088;
public static void main(String[] args) {
NettyServer server = new Ne ...
netty服务端入门
nio框架:netty
//1、启动Server,输入telnet命令:telnet localhost 8088,再输入任意字符
//为什么我-次只能发送一个字节?
public class NettyServer {
private int port=8088;
public static void main(String[] args) {
NettyServer server = ...
netty中使用protobuf实现多协议的消息
在我们使用 netty 的过程中,有时候为了高效的传输数据,经常使用 protobuf 进行数据的传输,netty默认情况下为我们实现的 protobuf 的编解码,但是默认的只能实现单个对象的编解码,但是我们在使用 netty 的过程中,可能需要传输的对象有各种各样的,那么该如何实现对protobuf多协议的解码呢?
在 protobuf 中有一种类型的字段叫做 on ...
Netty源码细节2--bind
前言
本菜鸟有过几年的网络IO相关经验, java层面netty也一直关注, 最近想对自己所了解的netty做一个系列的笔记, 不光技术水平有限, 写作水平更有限, 难免有错误之处欢迎指正, 共同学习.
源码来自Netty5.x版本, 本系列文章不打算从架构的角度去讨论netty, 只想从源码细节展开, 又不想通篇的贴代码, 如果没有太大的必要, 我会尽量避免贴代码或是去掉不影响主流程逻辑的代码 ...