Netty开篇——NIO章下(五)

SelectionKey

  1. 表示 Selector 和网络通道的注册关系,共四种(全是常量):

    • Int OP_ACCEPT:有新的网络连接可以接受,值为 16 (1 << 4)
    • Int OP_CONNECT: 代表连接已经建立,值为 8 (1 << 3)
    • Int OP_READ:代表读操作,值为 1 (1 << 0)
    • Int OP_WRITE: 代表写操作,值为 4 (1 << 2)
  2. 相关方法:

java 复制代码
public abstract Selector selector();//得到与之关联的Selector对象
public abstract SelectableChannel channel();//得到与之关联的通道
public final Object attachment();//得到与之关联的共享数据
public abstract SelectionKey interestOps(int ops);//设置或改变监听事件
public final boolean isAcceptable();//是否可以 accept 
public final boolean isReadable();//是否可以读
public final boolean isWritable();//是否可以写

ServerSocketChannel

  1. ServerSocketChannel 在服务器端监听新的客户端 Socket 连接
  2. 相关方法:
  • public static ServerSocketChannel open(),得到一个ServerSocketChannel通道
  • publle final ServerSocketChannel bind(SocketAddress local),设置服务器端端口 号
  • publle final SelectableChannel configureBlocking(boolean block), 设置阻塞或非 阻塞模式,取值false表示采用非阻塞模式
  • publlc SocketChannel accept(),接受一个连接,返回代表这个连接的通道对象
  • public final SelectionKey register(Selectorsel,int ops), 注册一个选择器并设置 监听事件

SocketChannel

  1. SocketChannel,网络IO通道,具体负责进行读写操作。NIO 把缓冲区的数据写入通道,或者把通道里的数据读到缓冲区。
  2. 相关方法:
  • public static SocketChannel open():/得到一个SocketChannel通道
  • public final SelectableChannel configureBlocking(boolean block);//设置阻塞或非阻塞模式,取值false表示采用非阻塞模式
  • public boolean connect(SocketAddress remote);//连接服务器
  • public boolean finishConnect();//如果上面的方法连接失败,接下来就要通过该方法完成连接操作
  • public int write(ByteBuffer src);//往通道里写数据
  • public int read(ByteBuffer dst);//从通道里读数据
  • public final SelectionKey register(Selectorsel,int ops,Object att);//注册一个选择器并设置监听事件,最后一个参数可以设置共享数据
  • public final void close();//关闭通道

NIO实现聊天室功能(选修)

  1. 要求:

    • 编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)
    • 实现多人群聊
    • 服务器端:可以监测用户上线,离线,并实现消息转发功能
    • 客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得)
  2. GroupChatServer

  1. GroupChatClient
相关推荐
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习4 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one4 小时前
算法--构造
java·数据结构·算法
SL_staff4 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff5 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko75 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.6 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff6 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河7 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目