免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4966 | 回复: 18
打印 上一主题 下一主题

将lighttpd的中对网络IO事件的封装抽取出来形成一个公用库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-19 19:49 |只看该作者 |倒序浏览
RT.

main.c中是一个根据这个库实现的echo服务器, 很简单还有很多地方需要完善,但是为了说明使用的原理,应该足够,testclient.py是测试用的python客户端.

2008年4月11日更新:
我发现lighttpd这个库要扩展比较麻烦,于是自己用C++封装了一个库,放在googldcode上,第一个版本支持了select和epoll机制,项目主页:
http://code.google.com/p/event4cpp/

我给这个库的定位是和libevent一个类型,都是用于简化sever编写中处理网络IO的,在test文件夹中有一个实例,是echo服务器,client.pl是测试客户端,perl编写.

[ 本帖最后由 converse 于 2008-4-11 10:46 编辑 ]

event.rar

6.71 KB, 下载次数: 125

论坛徽章:
0
2 [报告]
发表于 2008-03-19 19:50 |只看该作者
只抽取了select和epoll,还有其他一些模型,因为不常用就没有费事去做了.

论坛徽章:
0
3 [报告]
发表于 2008-03-19 20:04 |只看该作者
前段时间在看lighttpd的代码,总是有的地方不大理解,看来自己功力还不够啊。
好东西先收下了。

论坛徽章:
0
4 [报告]
发表于 2008-03-19 20:09 |只看该作者
目前没有2.6内核的开发机 不能测试epoll 有条件的朋友麻烦帮我看看 只需要在event.h中定义这个宏:

#define USE_LINUX_EPOLL


在event_init函数中传入的第二个参数是EVENT_HANDLER_LINUX_SYSEPOLL即可,其他的都不用改变了.

[ 本帖最后由 converse 于 2008-3-19 20:15 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-03-19 20:11 |只看该作者

回复 #4 converse 的帖子

曾经提取过
怎没想到发出来呢
明儿帮你测试一下

论坛徽章:
0
6 [报告]
发表于 2008-03-19 20:19 |只看该作者
不行,我在另一台机器测试了,epoll有问题,改天我再把改好的epoll放上来,现在还是用select测试吧.

论坛徽章:
0
7 [报告]
发表于 2008-03-20 09:07 |只看该作者
epoll 如何实现超时 断线?

论坛徽章:
0
8 [报告]
发表于 2008-03-21 10:07 |只看该作者
#define UNUSED(x) ( (void)(x) )

int event_select_init(event *ev)
{
        UNUSED(ev); //搞不懂这一句起什么作用,converse版主来解释一下.

        return -1;
}

论坛徽章:
0
9 [报告]
发表于 2008-03-21 10:14 |只看该作者

回复 #8 xxldc 的帖子

为了做到足够的通用,比如这个event可以用select, poll, epoll等的实现,所以传入的参数可能对某个IO模型而言是有用的,对有的而言就是无用的,那么如果传入无用的参数,编译的时候会报warning,加上那个宏可以避免这个问题.

BTW:我提取的这个库问题还很多,目前我在赶公司一个项目,过一阵拿出一个完备可用的出来.

论坛徽章:
0
10 [报告]
发表于 2008-03-21 10:17 |只看该作者
强大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP