BIO
小毛贼_哪里逃
这个作者很懒,什么都没留下…
展开
-
Netty-内置的 ChannelHandler
ChannelInboundHandlerAdapter public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ctx.fireChannelRead(msg);}接收上一个 handler 的输出,这里的msg就是上一个 handler 的输出。默认情况下 adapter 会通过fireChannelRead()方法直接把上一个 handler 的输出结果传递到下...原创 2020-05-18 10:34:35 · 1083 阅读 · 0 评论 -
Netty入门-pipeline 与 channelHandler
pipeline 与 channelHandler 的构成 无论是从服务端来看,还是客户端来看,在 Netty 整个框架里面,一条连接对应着一个 Channel,这条 Channel 所有的处理逻辑都在一个叫做ChannelPipeline的对象里面,ChannelPipeline是一个双向链表结构,他和 Channel 之间是一对一的关系。ChannelPipeline里面每个节点都是一个ChannelHandlerContext对象,这个对象能够拿到和 Channel 相...原创 2020-05-15 16:15:10 · 303 阅读 · 1 评论 -
Netty入门-通信协议编解码
设计通信协议 首先,第一个字段是魔数,通常情况下为固定的几个字节(我们这边规定为4个字节)。 为什么需要这个字段,而且还是一个固定的数?假设我们在服务器上开了一个端口,比如 80 端口,如果没有这个魔数,任何数据包传递到服务器,服务器都会根据自定义协议来进行处理,包括不符合自定义协议规范的数据包。例如,我们直接通过http://服务器ip来访问服务器(默认为 80 端口), 服务端收到的是一个标准的 HTTP 协议数据包,但是它仍然会按照事先约定好的协议来处理 HTTP 协议...转载 2020-05-15 14:43:22 · 361 阅读 · 0 评论 -
Netty入门-ByteBuf
ByteBuf结构 ByteBuf 是一个字节容器,容器里面的的数据分为三个部分,第一个部分是已经丢弃的字节,这部分数据是无效的;第二部分是可读字节,这部分数据是 ByteBuf 的主体数据, 从 ByteBuf 里面读取的数据都来自这一部分;最后一部分的数据是可写字节,所有写到 ByteBuf 的数据都会写到这一段。最后一部分虚线表示的是该 ByteBuf 最多还能扩容多少容量 以上三段内容是被两个指针给划分出来的,从左到右,依次是读指针(readerIndex)、写指针(writerIn..原创 2020-05-15 13:22:43 · 913 阅读 · 0 评论 -
Netty入门-客户端与服务端双向通信
服务端启动并指定连接数据读写逻辑 import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.chann..原创 2020-05-15 10:54:51 · 245 阅读 · 0 评论 -
Netty入门-客户端
服务端代码(解释以注释的形式体现):设置步骤:线程模型、IO模型,IO业务处理逻辑,连接import io.netty.bootstrap.Bootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.net原创 2020-05-15 09:59:35 · 149 阅读 · 0 评论 -
Netty入门-服务端
IDEA引入netty: 或者引入依赖(推荐) <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.6.Final</version> </dependency>...原创 2020-05-15 09:17:59 · 374 阅读 · 0 评论 -
Netty--BIO、NIO、AIO模型
BIO:同步阻塞型:原生java io模型(JDK1.4之前),对服务器资源要求比较高,并发局限于应用中,程序简单易理解。NIO:同步非阻塞型:netty,适用于连接数多且连接比较短的应用AIO:异步非阻塞型:也叫NIO.2,JKD7开始支持。适用于连接数多且连接比较长的应用。和操作系统联系密切,目前应用不广泛...原创 2020-05-07 14:34:44 · 218 阅读 · 0 评论 -
NIO--SocketChanel和ServerSocketChannel实现简易群聊改造--主从多Reactor多线程模式
架构图:原创 2020-05-14 15:20:53 · 156 阅读 · 2 评论 -
NIO--SocketChanel和ServerSocketChannel实现简易群聊改造--单Reactor多线程模式
架构图: Reactor import java.net.InetSocketAddress;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;import j.原创 2020-05-13 13:06:45 · 385 阅读 · 0 评论 -
NIO--SocketChanel和ServerSocketChannel实现简易群聊改造--单Reactor单线程模式
架构图:服务端代码改造1 Reactorimport java.net.InetSocketAddress;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;publ原创 2020-05-13 10:03:25 · 174 阅读 · 0 评论 -
NIO--SocketChanel和ServerSocketChannel实现简易群聊
服务端代码 import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketCha..原创 2020-05-13 08:49:54 · 604 阅读 · 0 评论 -
BIO--Socket和ServerSocket实现简易群聊
服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.HashSet;import java.util.Set;import java.util.conc..原创 2020-05-11 15:44:05 · 148 阅读 · 0 评论