bio&nio&netty&webSocket

1 BIO

ServerSocket、Socket

1.1 Server

  • 创建一个ServerSocket
  • 开始循环监听连接
  • 建立连接并获取客户端Socket
  • 从客户端Socket获取输入流
  • 从输入流读取数据并打印【输出】

1.2 Client

  • 创建一个客户端Socket
  • 从客户端Socket获取输出流
  • 创建一个扫描流
  • 扫描流循环读取键盘输入的数据,并填充到输出流【输入】

2 NIO

Selector、SelectionKey、
ServerSocketChannel、SocketChannel

2.1 Server

  • 创建一个Selector
  • 创建一个ServerSocketChannel
  • ServerSocketChannel绑定端口
  • ServerSocketChannel设置非阻塞
  • ServerSocketChannel注册到Selector,并指定用于监听连接的SelectionKey
  • 开始循环监听SelectionKey
  • 获取待处理的SelectionKey
  • 遍历每一个SelectionKey
  • 如果是连接事件:
  • 建立连接并获取客户端SocketChannel
  • 将客户端SocketChannel配置为非阻塞
  • 将客户端SocketChannel注册到Selector,并指定SelectionKey
  • 如果是读事件
  • 获取客户端SocketChannel
  • 从客户端SocketChannel读取数据
  • 将数据写入到除了消息发送方的其它SocketChannel
  • 移除SelectionKey

2.2 Client

  • 创建一个客户端SocketChannel
  • SocketChannel与远程地址建立连接
  • SocketChannel设置为非阻塞
  • SocketChannel注册到Selector,并指定用于监听读事件的SelectionKey
  • 创建一个扫描流
  • 扫描流读取键盘输入并且写入到SocketChannel【输入】
  • 创建一个子线程任务:
  • 获取待处理事件的SelectionKey
  • 如果是读事件
  • 从客户端SocketChannel读取数据并打印【输出】
  • 移除SelectionKey

3 Netty

NioEventLoopGroup、
ServerBootstrap、Bootstrap、
NioServerSocketChannel、NioSocketChannel、
ChannelPipeline、ChannelHandler、ChannelFuture

3.1 Server

  • 创建一个bossGroup
  • 创建一个workerGroup
  • 创建一个ServerBootstrap
  • ServerBootstrap配置bossGroup、workerGroup
  • ServerBootstrap配置NioServerSocketChannel类型
  • ServerBootstrap添加一些通道相关配置
  • SO_BACKLOG、SO_KEEPALIVE、TCP_NODELAY
  • ServerBootstrap往ChannelPipeline中添加ChannelHandler
  • ServerBootstrap绑定端口并使用ChannelFuture进行监听
  • ChannelFuture添加自定义监听器
  • 使用ChannelFuture监听关闭通道事件

3.2 Client

  • 创建一个group
  • 创建一个Bootstrap
  • Bootstrap配置group
  • Bootstrap配置NioSocketChannel类型
  • Bootstrap往ChannelPipeline中添加ChannelHandler
  • Bootstrap绑定远程地址并使用ChannelFuture进行监听
  • 使用ChannelFuture监听关闭通道事件

3.3 ChannelHandler

3.3.1 具体ChannelHandler

ProtobufEncoder、ProtobufDecoder、
HttpServerCodec、HttpObjectAggregator、ChunkedWriteHandler、WebSocketServerProtocolHandler、
IdleStateHandler、LoggingHandler

3.3.2 抽象ChannelHandler

接口或者抽象类:
ChannelInboundHandlerAdapter、ChannelOutboundHandlerAdapter、
StringEncoder、StringDecoder、
MessageToByteEncoder、ByteToMessageDecoder、
SimpleChannelInboundHandler、ReplayingDecoder

方法:
handlerAdded、handlerRemoved、
channelRegistered 、channelUnregistered 、
channelActive、channelInactive、
channelRead、channelReadComplete、
decode、encode、
userEventTriggered、
exceptionCaught

3.3.3 ChannelHandler的生命周期

  • 建立连接(添加处理器、注册通道、激活通道):
  • handlerAdded –> channelRegistered –> channelActive
  • 读取数据(读取通道、通道读取完毕):
  • channelRead –> channelReadComplete
  • 关闭连接(取消激活通道、取消注册通道、移除处理器):
  • channelInactive –> channelUnregistered –> handlerRemoved

4 WebSocket

@ServerEndpoint、@OnOpen、@OnMessage、@OnClose、@OnError

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值