Epoll模型服务器实现

来源:互联网 发布:泡沫 网络歌手 编辑:程序博客网 时间:2024/05/17 04:51

前面实现了2版本的服务器(多进程、Select),接下来实现了一下Epoll模型的网络服务器。相对于Select,Epoll最大的好处就是用回调来处理有数据的连接,省去了轮询带来的操作浪费,也就是说没一次都能只找能够读的连接。Epoll可以有水平触发,也可以边缘触发,用水平触发有一些浪费,用边缘触发能让时间资源最大化,不过要小心处理读写,否则会出现一直不能写或读的连接。

原理很简单,我用一个进程实现了所有的操作,给监听socket添加读可用事件,给连接socket添加读可用进程,使用边缘触发机制回调事件。我一开始给连接socket也添加了写可用事件,但是发现,服务器一直不写,原因是当一次写完后,如果此时没有数据要写,那么由于是边缘触发,以后在也不会触发的机会。所以,我用轮询的方式来处理写,维护一个需要写的连接集合,对集合内的每个连接尝试进行非阻塞写,实现过程中只遇到这一个困难。

代码猛戳:点击打开链接。

0 0
原创粉丝点击