环境相关介绍:
1.8 - JDK (1.6前后有版本变化)
CentOS Linux release 7.8.2003 (Core)
多路复用 及 Reactor模式
为何需要
在上一节中我们讲解到NIO中如何解决阻塞以及更好的进行客户端数据的读取数据。
但是同样也依旧会存在以下问题:
- 代码中维护客户端连接。
- 服务器在不断的将客户端FD传递进行轮询判断是否有事件(涉及线程上下文切换)。
Demo
11 public class Multiplexing {
12
13 private ServerSocketChannel server = null;
14 private Selector selector = null;
15 int port = 9090;
16
17 public void initServer(){
18 try {
19 server = ServerSocketChannel.open();
20 server.configureBlocking(false);
21 server.bind(new InetSocketAddress(port));
22 selector = Selector.open();
23 server.register(selector, SelectionKey.OP_ACCEPT);
24 } catch (IOException e) {
25 e.printStackTrace();
26 }
27 }
28
29 public void start(){
30 initServer();
31