C语言实现简单的Reactor

本文介绍了如何使用C语言实现Reactor模式,通过epoll作为事件多路分发器,利用函数指针实现事件回调。文章详细阐述了事件抽象、监听事件处理、accept_conn函数的调用以及代码思路,最后提供了github链接供读者参考。
摘要由CSDN通过智能技术生成

Reactor

介绍

Reactor模式网上有很多讲解,我这里不想过多介绍。其核心共有三个。

  1. 抽象的事件
  2. 事件多路分发器
  3. 一个Reactor用来管理整个流程

reactor by c

Reactor是我们从代码中抽取出来方便我们进行管理的。但这里我们完全不去管它。很暴力地使用面向过程的思想去做。

  • 抽象的事件——直接被我们具体化为fd
  • 事件多路分发器——直接被我们具体化为epoll

代码思路

服务器端的常规设置。socket-bind-listen,但要注意设置成为nonblock。

现在我们就得到了listenfd。我们希望当有客户连接到来的时候,其自动帮助我们去回调accept_conn函数。该怎么办呢?

借助epoll

epoll的作用是当文件描述符就绪的时候,通知epoll的使用者该文件描述符就绪。
很明显,我们将listenfd注册到epoll中后,当有连接到来时,epoll就会通知我们listenfd已经就绪。按照以前的思路,我们会去做一个if判断,如果返回的fd是listenfd就去调用accept_conn。如果是其它fd,就去做其它的事情。

但这里我们将利用回调函数的思想。当有事件就绪(即有fd就绪时候),我们无脑回调一个叫做call_back的函数。(很明显,这是一个函数指针)

        int nfd = epoll_wait(g_efd, events, MAX_EVENTS + 1, 1000);
        my_error(nfd, "epoll_wait error");
        for(i = 0; i < nfd; ++i)
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值