IO编程、netty
文章平均质量分 77
wwyh520
这个作者很懒,什么都没留下…
展开
-
Netty之解决TCP粘包拆包(自定义协议)
1、什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。原创 2017-09-25 14:23:19 · 498 阅读 · 0 评论 -
netty demo 模拟heartbeat 5s
前面简单地了解了一下IdleStateHandler,我们现在写一个简单的心跳demo:1)服务器端每隔5秒检测服务器端的读超时,如果5秒没有接受到客户端的写请求,也就说服务器端5秒没有收到读事件,则视为一次超时2)如果超时二次则说明连接处于不活跃的状态,关闭ServerChannel3)客户端每隔4秒发送一些写请求,这个请求相当于一次心跳包,告之服务器端:客户端仍旧活着原创 2018-01-17 11:18:23 · 460 阅读 · 0 评论 -
Reactor和Proactor对比以及优缺点(netty的底层原理reactor模型)
IO设计模式:Reactor和Proactor对比平时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少;这里学习下其模型结构,重点对比下两者的异同点;反应器ReactorReactor模式结构Reactor包含如下角色:Handle 句柄;用来标识socket连原创 2017-09-22 14:44:36 · 7297 阅读 · 0 评论 -
Netty集成Google的ProtoBuf序列化
protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等。其特点是不限语言、不限平台、扩展性强Netty也提供了对Protobuf的天然支持,我们今天就写一个简单的示例,简单地了解一下Netty对Google的protoBuf的支持我们的示例场景很简单的:客户端发送一个信息,这个信息用Protobuf来做序列化,然后服务器端接收这个信息,解码,读取信...原创 2017-09-22 10:43:11 · 535 阅读 · 0 评论 -
Netty4.1 - TCP粘包拆包解决方案及案例代码
Netty是目前业界最流行的NIO框架之一,它的健壮性、高性能、可定制和可扩展性在同类框架中都是首屈一指。它已经得到了成百上千的商业项目的验证,例如Hadoop的RPC框架Avro就使用了Netty作为底层通信框架,其他的业界主流RPC框架,例如:Dubbo、Google 开源的gRPC、新浪微博开源的Motan、Twitter 开源的 finagle也使用Netty来构建高性能的异步通信能力。另...原创 2017-09-22 10:28:20 · 1376 阅读 · 0 评论 -
netty原理详解
NIO客户端序列图步骤一:打开SocketChannel,绑定客户端本地地址(可选,默认系统会随机分配一个可用的本地地址),示例代码如下:1SocketChannel clientChannel = SocketChannel.open();步骤二:设置SocketChannel为非阻塞模式,同时设置客户端连接的TCP参数,示例代码如下:1clientChannel.configureBlock...原创 2017-09-22 10:07:21 · 4810 阅读 · 1 评论 -
Linux 网络 I/O 模型简介(图文)
1、介绍 Linux 的内核将所有外部设备都看做一个文件来操作(一切皆文件),对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。而对一个socket的读写也会有响应的描述符,称为socket fd(socket文件描述符),描述符就是一个数字,指向内核中的一个结构体(文件路径,数据区等一些属性)。 根据UNIX网络原创 2017-09-21 17:17:06 · 233 阅读 · 0 评论 -
BIO编程 及实现代码
BIO编程 1.1、传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间的通信。 服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。 传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输...原创 2017-09-21 17:37:39 · 1640 阅读 · 0 评论 -
伪异步I/O编程及代码实现
伪异步I/O编程 为了改进这种一连接一线程的模型,我们可以使用线程池来管理这些线程(需要了解更多请参考前面提供的文章),实现1个或多个线程处理N个客户端的模型(但是底层还是使用的同步阻塞I/O),通常被称为“伪异步I/O模型“。 伪异步I/O模型图: 实现很简单,我们只需要将新建线程的地方,交给线程池管理即可,只需要改动刚刚的Server代码即可:[java] view ...原创 2017-09-21 17:38:27 · 550 阅读 · 0 评论 -
NIO 编程及代码实现
NIO 编程 JDK 1.4中的java.nio.*包中引入新的Java I/O库,其目的是提高速度。实际上,“旧”的I/O包已经使用NIO重新实现过,即使我们不显式的使用NIO编程,也能从中受益。速度的提高在文件I/O和网络I/O中都可能会发生,但本文只讨论后者。 2.1、简介 NIO我们一般认为是New I/O(也是官方的叫法),因为它是相对于老的I/O类库新增的(其实在JD...原创 2017-09-21 17:39:15 · 2391 阅读 · 7 评论 -
AIO编程(NIO2.0)及代码实现
AIO编程 NIO 2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。 异步的套接字通道时真正的异步非阻塞I/O,对应于UNIX网络编程中的事件驱动I/O(AIO)。他不需要过多的Selector对注册的通道进行轮询即可实现异步读写,从而简化了NIO的编程模型。 直接上代码吧。 3.1、Server端代码 Server:[java] view...原创 2017-09-21 17:40:26 · 2395 阅读 · 0 评论 -
netty去实现文件传输
在写出了Netty Hello World 和 netty对象传输之后,又觉得不够,看了官网的例子,所以有了现在的这个文件传输。顺便说下,netty官网的例子真的好,如果要学习netty,还是看官网例子的好。不过我英文不太好,刚开始走了绕了好大一圈,但是现在熟悉了之后,回过头来看,还是官网的牛X。在这里再说下netty的零拷贝,这个零拷贝是netty在3.2版本中新加入的功能。其主原创 2017-09-19 22:02:43 · 974 阅读 · 0 评论 -
smartsocket使用demo
http://smartsocket.mydoc.io/?t=229642原创 2018-02-05 14:26:36 · 1992 阅读 · 0 评论