

网络模型
source link: https://weedge.github.io/post/poller/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

网络模型 - 时间飘过
看了一些开源的网络I/O模型框架库,尝试着按照理解简单实现一个相对简单的网络I/O模型框架,类似netty的reactor模型。
Netty的NIO模型是Reactor反应堆模型(Reactor相当于有分发功能的多路复用器Selector)。每一个连接对应一个Channel(多路指多个Channel,复用指多个连接复用了一个线程或少量线程,在Netty指EventLoop),一个Channel对应唯一的ChannelPipeline,多个Handler串行的加入到Pipeline中,每个Handler关联唯一的ChannelHandlerContext。
Reactor 模式的基本工作流程如下:
- Server 端完成在
bind&listen
之后,将 listenfd 注册到 epollfd 中,最后进入 event-loop 事件循环。循环过程中会调用select/poll/epoll_wait
阻塞等待,若有在 listenfd 上的新连接事件则解除阻塞返回,并调用socket.accept
接收新连接 connfd,并将 connfd 加入到 epollfd 的 I/O 复用(监听)队列。 - 当 connfd 上发生可读/可写事件也会解除
select/poll/epoll_wait
的阻塞等待,然后进行 I/O 读写操作,这里读写 I/O 都是非阻塞 I/O,这样才不会阻塞 event-loop 的下一个循环。然而,这样容易割裂业务逻辑,不易理解和维护。 - 调用
read
读取数据之后进行解码并放入队列中,等待工作线程处理。 - 工作线程处理完数据之后,返回到 event-loop 线程,由这个线程负责调用
write
把数据写回 client。
参考这些网络模型,采用golang封装的底层epoll/kqueue系统调用方法,支持tcp协议,实现一个相对简单的网络模型,框架如下:
代码实现:https://github.com/weedge/lib/tree/main/poller (对一个开源库进行的改造,codec编解码器待完善)
Recommend
-
64
-
51
-
50
文章首发于51CTO技术栈公众号 作者 陈彩华 文章转载交流请联系 [email protected] 复制代码随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力,由此,本文旨在为大家提供有用的概览以及网络服务模型的比较,以揭开
-
65
引言 今天回顾一下--网络七层模型&&网络数据包 网络基本概念 OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图供一个使各种不同的计算...
-
34
【编者的话】今天许多WEB应用由各类容器组成,使用不同模块的服务。Kubernetes使多容器环境下的的应用流程编排更加高效精简。使用Kubernetes容...
-
58
-
42
JAVA 的网络 IO 模型彻底讲解 1 ,最原始的 BIO 模型 该模型的整体思路是有一个独立的 Acceptor 线程负...
-
47
TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。
-
28
加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师 等大牛群内...
-
62
错误提示页面 抱歉,出错啦! 页面不存在或者已被管理员删除! 返回首页
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK