Socket
ServerSocket
BIO 阻塞读写监听,阻塞连接监听,单独线程读写
NIO IO多路复用,epoll, 单线程阻塞消息监听和连接监听,单独线程读写
while true { //伪代码
events = takeEvents(fds) // 获取事件,如果没有事件,线程就休眠
for event in events {
if event.isAcceptable {
doAccept() // 新链接来了
} elif event.isReadable {
request = doRead() // 读消息
if request.isComplete() {
doProcess()
}
} elif event.isWriteable {
doWrite() // 写消息
}
}
}
AIO 基于事件IO,拒绝循环。
Reactor反应器模式设计
反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。简单说,就是如何处理多个客户端的并发请求的解决模式。
Netty 是建立在NIO基础之上
如果不用netty,使用原生JDK的话,有如下问题:
1、API复杂
2、对多线程很熟悉:因为NIO涉及到Reactor模式
3、高可用的话:需要出路断连重连、半包读写、失败缓存等问题
4、JDK NIO的bug
评论区