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
相关推荐
D***77651 小时前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea
20岁30年经验的码农1 小时前
Spring Security 6.x 安全实践指南
java
胖咕噜的稞达鸭2 小时前
自定义shell命令行解释器自制
java·开发语言
q***33375 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
Y***h1878 小时前
第二章 Spring中的Bean
java·后端·spring
8***29318 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger8 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***06299 小时前
Tomcat的升级
java·tomcat
多多*9 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交9 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度