- 论坛徽章:
- 4
|
本帖最后由 linux_c_py_php 于 2012-10-20 23:39 编辑
再分享点个人经历吧, 在做XMPP集群的时候, 需要做很多机器人来为其他客户端提供服务, 这些机器人我们开发有自己的机器人开发框架, 但还是I/O方面是基于Jabberd的mio框架.
这个机器人框架不是我开发的, 我工作的任务是为机器人框架开发module, 也就是上面说的plugin, 对于每一个请求, 我的plugin都会被回调, 比如我做了一个proxy module, 对于每一个请求, 我的module会将请求转发到线下一份, 而这个转发过程不是说阻塞在i/o loop里的, 而是在程序启动时该module就创建了一个线程池, 每次回调proxy module, 我只是把请求丢到线程池里就立即返回OK了, 线程池里慢慢去转发多慢都无所谓.
但这个机器人框架和我提到的框架的一个重大区别就是是否允许客户端等待请求, 这个机器人框架是不支持的, 也就是要求所有的plugin回调立即返回, 如果它阻塞在那里, 那么整个event loop就阻塞了. 而我这里贴的, 就是允许插件不立即返回的, 我允许插件异步的去处理, 同时我还允许插件在处理完毕后将结果返回到event loop里, 参与client的应答, 而这个等待的过程是不阻塞event loop实现的(聪明的读者会发现, 其实这个框架的event loop就是轮询的去问一个插件是否完成了, 插件自身处理完成后也是通过事件机制异步完成应答传递的, 整个过程是异步无锁状态推动的.).
再有一点, 我说的估计很多人都会认同, 并且觉得这个开发框架或者说模式是很给力的, 因为:
几乎绝大多数程序员做Server开发都普遍的只会两种做法:
1, 有阻塞操作就一个线程一个client, 阻塞的去处理, 靠线程数撑连接.
2, 没有阻塞操作的就epoll, 解析出来一个请求立马处理完就发送应答.
我提到的开发模式或者思路就是将1,2融合起来, 可以称作万能的异步框架. (现在我已经开始转移分布式的学习了, 能够更好的将分布式算法和Server开发能力结合.) |
|