背景:最近终于开始了我的实习生之路,本来在进公司之前还比较紧张,尽管拿到了offer,因为毕竟这是一个新的起点,一开始从学生到员工这个身份的转变让我有些不太适应,但是还好在公司里遇到了人超级好的软件经理Alex以及其他精明能干的小伙伴们,所以这个过渡时间也很快。
一开始Alex让我通过公司的一个项目了解libev这个库,我在看同事写的代码的过程中遇到的问题实在太多,由于我之前写的和这个项目类似的代码实现非阻塞网络连接都是通过select方法,但是同事写的代码中大量使用到了libev中的API,对于从未接触过的我来说想看懂真的是痴人说梦,但是我相信我的学习能力,于是我就开始了自己对libev的探索之路。
libev是一个事件驱动的编程框架,通过向libev中注册感兴趣的事件以及相应的回调函数,那么libev会对所注册的事件源进行管理,并在事件发生时调用对应的回调函数进行处理。我们的例子中就是对socket的连接事件,读写事件进行监听并调用相应的回调函数进行处理。
网上有许多介绍libev的博客和代码,博客一般都写得很容易懂,但是代码一般就只是伪码了,想要运行必须自己不断地debug,我在综合了各种博文中的方法之后写出了如下代码,功能是同一个服务端提供多个客户端连接,接收到客户端连接之后把消息回传,若客户端收到q,则断开连接。