非阻塞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对象的有效期间