C语言实现简单的Reactor

Reactor介绍Reactor模式网上有很多讲解,我这里不想过多介绍。其核心共有三个。抽象的事件事件多路分发器一个Reactor用来管理整个流程reactor by cReactor是我们从代码中抽取出来方便我们进行管理的。但这里我们完全不去管它。很暴力地使用面向过程的思想去做。抽象的事件——直接被我们具体化为fd事件多路分发器——直接被我们具体化为epoll代码思路...
摘要由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)
        
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值