Epoll模型服务器实现
2015-09-03 06:03
351 查看
前面实现了2版本的服务器(多进程、Select),接下来实现了一下Epoll模型的网络服务器。相对于Select,Epoll最大的好处就是用回调来处理有数据的连接,省去了轮询带来的操作浪费,也就是说没一次都能只找能够读的连接。Epoll可以有水平触发,也可以边缘触发,用水平触发有一些浪费,用边缘触发能让时间资源最大化,不过要小心处理读写,否则会出现一直不能写或读的连接。
原理很简单,我用一个进程实现了所有的操作,给监听socket添加读可用事件,给连接socket添加读可用进程,使用边缘触发机制回调事件。我一开始给连接socket也添加了写可用事件,但是发现,服务器一直不写,原因是当一次写完后,如果此时没有数据要写,那么由于是边缘触发,以后在也不会触发的机会。所以,我用轮询的方式来处理写,维护一个需要写的连接集合,对集合内的每个连接尝试进行非阻塞写,实现过程中只遇到这一个困难。
代码猛戳:点击打开链接。
原理很简单,我用一个进程实现了所有的操作,给监听socket添加读可用事件,给连接socket添加读可用进程,使用边缘触发机制回调事件。我一开始给连接socket也添加了写可用事件,但是发现,服务器一直不写,原因是当一次写完后,如果此时没有数据要写,那么由于是边缘触发,以后在也不会触发的机会。所以,我用轮询的方式来处理写,维护一个需要写的连接集合,对集合内的每个连接尝试进行非阻塞写,实现过程中只遇到这一个困难。
代码猛戳:点击打开链接。
相关文章推荐
- LeetCode Reorder List
- LeetCode Reorder List
- 分离php和mysql搭建LAMP平台
- Search Insert Position
- Nginx 配置常见误区
- Sublime Text 3 开发php
- lintcode做题总结, 题目Rotate String 8
- LeetCode Convert Sorted Array to Binary Search Tree
- LeetCode Convert Sorted Array to Binary Search Tree
- [React] React Fundamentals: Integrating Components with D3 and AngularJS
- [LeetCode#71]Simplify Path
- Minimum Size Subarray Sum
- 【2015年奇虎360|绿盟科技|唯品会|4399秋招岗位分析及内推】一大波网络|安全|运维岗位来袭~
- LVM的基本运用
- LeetCode Convert Sorted List to Binary Search Tree
- LeetCode Convert Sorted List to Binary Search Tree
- matlab绘图时设置原点的位置
- thinkinginjava学习笔记08_接口
- 高效程序的秘密_hacker's delight读书笔记
- Google Earth 图片叠加Geo-referencing算法