Netty开篇——NIO章下(五)

这篇具有很好参考价值的文章主要介绍了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. 相关方法:
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();//是否可以写

 Netty开篇——NIO章下(五),Netty,nio,java

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), 注册一个选择器并设置 监听事件

 Netty开篇——NIO章下(五),Netty,nio,java

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();//关闭通道

Netty开篇——NIO章下(五),Netty,nio,java

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

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

    Netty开篇——NIO章下(五),Netty,nio,java

Netty开篇——NIO章下(五),Netty,nio,java

Netty开篇——NIO章下(五),Netty,nio,java

 Netty开篇——NIO章下(五),Netty,nio,java

3. GroupChatClient 

Netty开篇——NIO章下(五),Netty,nio,java

Netty开篇——NIO章下(五),Netty,nio,java

Netty开篇——NIO章下(五),Netty,nio,java文章来源地址https://www.toymoban.com/news/detail-806832.html

到了这里,关于Netty开篇——NIO章下(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 以 Java NIO 的角度理解 Netty

    上篇文章《Netty 入门指南》主要涵盖了 Netty 的入门知识,包括 Netty 的发展历程、核心功能与组件,并且通过实例演示了如何使用 Netty 构建一个 HTTP 服务器。由于 Netty 的抽象程度较高,因此理解起来可能会更加复杂和具有挑战性,所以本文将通过 Java NIO 的处理流程与 Netty 的

    2024年02月12日
    浏览(43)
  • Java NIO 图解 Netty 服务端启动的过程

    了解整体Netty常用的核心组件后,并且对比了传统IO模式。在对比过程中,找到了传统IO对应Netty中是如何实现的。最后我们了解到在netty中常用的那些组件。 本文在了解下这些核心组件的前提下,进一步了解组件如何在整个服务器启动过程如何被创建,如何组件之间配合来使

    2024年02月11日
    浏览(37)
  • 快速入门Java NIO(Not I/O)的网络通信框架--Netty

    了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1.1 Netty 是什么? Netty 是一个异步(基于多线程)的、基于事件驱动(多路复用的那写事件驱动)的网络应用框架,用于快速开发可维护、高性能的

    2024年01月17日
    浏览(49)
  • 【netty基础四】netty与nio

    阻塞I/O在调用InputStream.read()方法时是 阻塞的,它会一直等到数据到来 (或超时)时才会返回; 同样,在调用ServerSocket.accept()方法时,也会一直 阻塞到有客户端连接 才会返回,每个客户端连接成功后,服务端都会启动一个线程去处理该客户端的请求。 阻塞I/O的通信模型示意

    2024年02月10日
    浏览(87)
  • 聊聊分布式架构06——[NIO入门]简单的Netty NIO示例

    目录 Java NIO和Netty NIO比较 Java NIO: Netty: Netty NIO中的主要模块 Transport(传输层) Buffer(缓冲区) Codec(编解码器) Handler(处理器) EventLoop(事件循环) Bootstrap和Channel(引导和通道) Future和Promise(异步编程) Netty示例 服务端时序图 服务端代码 客户端时序图 客户端代码

    2024年02月07日
    浏览(36)
  • NIO和netty的常用类

    给ServerBootstrap配置两个EventLoopGroup,一个建立连接,一个处理网络io。 EventLoopGroup给EventLoop分配线程。 在 Netty 中,EventLoop 通过不断轮询 Selector 来检测 Channel 上发生的事件,当 Channel 上的事件到达时,EventLoop 会将事件传入 相应的Channel 的成员变量 ChannelPipeline 中,经过所有C

    2024年01月25日
    浏览(49)
  • Netty和传统NIO之间的比较

    Netty回显服务器实现: 上述代码是一个使用Netty实现的回显服务器。让我们逐行解释代码的实现: 首先,我们创建了两个 NioEventLoopGroup ,一个用于接收客户端连接(bossGroup),另一个用于处理客户端连接上的请求(workerGroup)。 然后,我们创建一个 ServerBootstrap 实例,并配置

    2024年01月16日
    浏览(40)
  • Netty Review - NIO空轮询及Netty的解决方案源码分析

    Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty Review - 服务端channel注册流程源码解析 NIO空轮询(Empty Polling)是指在使用Java NIO 时,当Selector上注册的Channel没有就绪事件时,Selector.select()方法会返回0,但该方法会导致CPU空转,因为它会不断地调用操

    2024年02月21日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包