摘要: 说明:简单做了一个服务端框架demo,粗略实现一下自己的想法,和协程(coroutine)的理念基本相同,有这么几个核心设计要素是我希望通过代码展现出来的:1,程序性质是一个服务端框架,需要用户编写请求的解析/反序列化函数,之后请求将经过若干预先编写的插件进行处理。(PS:个人精力的关系,插件直接与源码一起编译,而不是.so)。2,框架支持插件异步化处理,即某个插件在处理某个请求时可以yield,并在异步处理完成后resume恢复后续插件的处理以及后续请求的处理,这与luacoroutine的想法是一样。框架的目的是:有这么一大类服务,它们的客户端要求严格的请求->应答顺序,比如请求1- 阅读全文
posted @ 2013-05-18 11:17 xmpp? 阅读(932) 评论(0) 推荐(0) 编辑
摘要: 最近在探索借助epoll做为reactor,设计高效的服务端的方法.常见的基于epoll的编程方式主要为单线程的事件循环,用于一些非阻塞的业务逻辑开发是比较高效并且简单易懂的.但实际开发业务的时候,往往面临着查数据库,访问磁盘,通过网络访问其他主机的需求,耗时往往较长,所以单线程的epoll并不能轻松的适用,往往需要做一些额外的设计与构思才能得到解决.解决此类慢处理的服务端架构主要以leader-follower架构以及half-sync-half-async为主,通过多线程的并发能力来满足同时执行多个慢处理业务逻辑.其中,leader-follower因为较half-sync-half-a. 阅读全文
posted @ 2013-02-19 11:33 xmpp? 阅读(2743) 评论(10) 推荐(3) 编辑
摘要: nad是jabberd2自创的xml存储结构, 它基于expat xml库实现, 提供了更加快捷方便操作xml文档的方法.nad的意思是not a dom, 意思就是使用自定义结构存储xml dom, 比dom更快更方便.先读一下nad.h中的说明:/** @file util/nad.h * @brief Not A DOM * @author Jeremie Miller * @author Robert Norris * $Date: 2004/05/05 23:49:38 $ * $Revision: 1.3 $ * * NAD is very simplistic, ... 阅读全文
posted @ 2012-11-20 16:06 xmpp? 阅读(561) 评论(0) 推荐(0) 编辑
摘要: xhash是jabberd2的哈希表, 并提供了迭代器用于遍历xhash.解释一下结构体的命名,xht_struct意思是x hash tasble,xhn_struct意思是x hash node, 这样方便理解记忆.xhn_struct的成员变量顾名思义, 不赘述.xht_struct中, p是内存池, 负责node的分配等, zen是桶数组, free_list是回收的node内存, iter_bucket和iter_node被用于记录迭代器的位置.typedef struct xhn_struct{ struct xhn_struct *next; struct xhn_s... 阅读全文
posted @ 2012-11-20 14:21 xmpp? 阅读(723) 评论(0) 推荐(0) 编辑
摘要: xmpp使用util/pool作为内存池, 相比于常见的内存池模式, xmpp的pool使用了一种个性的设计: 一个pool为一个对象而生, 而对象随着pool的消亡而释放, 一个程序里可能有成百数千的pool, 每个pool管理一个小小的对象, 并且分配过的内存是不能重用的, 也没必要一点点的释放, 把整个pool销毁是唯一的释放方法.1, 数据结构:pool_cleanup_t是内存的释放回调函数, 负责真正的free内存.pheap是存储内存块的结构体, 每个malloc返回的内存对应一个pheap, size表示malloc(size)的size, used表示使用了多少.pfree是 阅读全文
posted @ 2012-11-19 17:43 xmpp? 阅读(830) 评论(0) 推荐(0) 编辑
摘要: mio是一个xmpp的I/O复用事件库, 对开发者提供透明API进行开发, 而在API之下允许灵活使用不同的I/O复用作为底层实现. mio采用了大量的宏替换, 实现了 开发者API -> 底层实现 的解耦, 该解耦逻辑发生在预编译阶段, 而不是我们习惯的运行阶段解耦技巧. mio暴露给用户的API是固定不变的, 这些API的声明存在于mio.h中, 如下: 1, 描述符:typedef struct mio_fd_st{ int fd; } *mio_fd_t; 2, mio核心结构体: 内部看似采用了函数指针解耦, 但其实各个函数指针最终都指向了固定的函数, 并不是用来解... 阅读全文
posted @ 2012-11-19 16:16 xmpp? 阅读(772) 评论(0) 推荐(0) 编辑