前言
服务器使用libevent做事件循环, 然后使用zmq做线程间通讯, libevent监听zmq的消息, 一旦zmq有消息过来, 就会回调到固定的函数。使用zmq需要注意的是, 一旦zmq消息回调, 必须读空整个队列的消息. 否则下次就不会回调。
问题症状
我们使用libevent监听了多个zmq, 同时监听了别的事件(退出事件等). 其中有一个zmq消息非常繁忙, 每秒会产生上万到十万不等的数据. 这种时候会发现libevent再也无法响应其他消息。
继续阅读
服务器使用libevent做事件循环, 然后使用zmq做线程间通讯, libevent监听zmq的消息, 一旦zmq有消息过来, 就会回调到固定的函数。使用zmq需要注意的是, 一旦zmq消息回调, 必须读空整个队列的消息. 否则下次就不会回调。
我们使用libevent监听了多个zmq, 同时监听了别的事件(退出事件等). 其中有一个zmq消息非常繁忙, 每秒会产生上万到十万不等的数据. 这种时候会发现libevent再也无法响应其他消息。
继续阅读
ZMQ不是消息队列, 是一套构建消息队列的组件集合, 它告诉你每个组件有什么特性, 每个组件可以干什么, 至于怎么构建消息队列, 全凭自己决定. 我们可以搭建出同步的, 异步的, 可靠的, 不可靠的, 分布式的, 非分布式的等等. 正是这种灵活的方式, ZMQ才能满足各式各样的需求(借别人一句话:ZMQ就像是一盒积木,只要你有足够的想象力,就可以用它组装出任何造型的网络架构).
继续阅读
zmq 作为一个基础的消息组件, 基本上是我们做通信的唯一选择, 事实上也是如此. 这里略记一下刚踩到的一个坑.
继续阅读
tornado 是一个python写的web服务器, 底层使用epoll, 非阻塞运行, 使得每秒能处理上千的请求, 同时使用nginx 与之配合,可以非常方便的扩容. 同时tornado也是一个理想的web框架, 帮我们封装了大量的web操作.
继续阅读