非阻塞socket

非阻塞Socket编程中涉及的关键类包括ServerSocketChannel、SocketChannel和Selector。ServerSocketChannel作为服务器端替代类,SocketChannel用于替代Socket并与Selector注册事件。Selector通过轮询机制监控注册事件,如连接、读写等。SelectionKey则跟踪注册事件,当事件发生时,将相关信息加入selectedKeys集合。同时,Charset、CharsetDecoder和CharsetEncoder负责字符编码解码。
摘要由CSDN通过智能技术生成

非阻塞socket中的几个重要类:

  • ServerSocketChannel(可以看作是ServerSocket的替代类, 需要通过open()的静态方法创建)
  • SocketChannel(Socket 的替代类)通过register方法向selector 注册一个事件

  • Selector类似一个观察者,SocketChannel向Selector注册了特定的事件,Selector就会监控这些事件是否发生。Selector内部原理实际是在做一个对所注册的channel的轮询访问,不断的轮询(目前就这一个算法),一旦轮询到一个channel有所注册的事情发生,比如数据来了,他就会站起来报告,交出一把钥匙,让我们通过这把钥匙来读取这个channel的内容。主要方法有:
        1. keys() 当前所有向Selector注册的SelectionKey的集合
        2. selectedKeys() 已注册的被Selector捕获的SelectionKey的集合
        3. open() 打开一个selector
        4. select() 如果注册的事情发生了,select() 函数返回值就会大于0
  • SelectionKey,当ServerSocketChannel或SocketChannel通过register()方法向Selector注册事件时,register()方法会创建一个SelectionKey对象,这SelectionKey  对象是用来跟踪注册事件的句柄。 在SelectionKey对象的有效期间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值