现在一般的物联网服务器都需要处理大量的socket链接。这些socket有个共同点:每次数据量不大,但是需要时刻保持连接。
如果采用同步socket(每个socket使用一个线程管理,那么服务器资源消耗非常大)。
处理这些socket的最佳方法是使用异步方法编写服务器端程序。而libevent库就是一个不错的选择。
libevent为异步网络库,使用C语言编写。
总体来说,libevent有下面一些特点和优势:
* 事件驱动,高性能;
* 轻量级,专注于网络;
* 跨平台,支持 Windows、Linux、Mac OS;
* 支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等;
* 支持 I/O,定时器和信号等事件;
这两天我的树莓派SD卡又坏了,不知道是SD质量原因还是其他原因。不想折腾了,把之前的beaglebone black拿出来玩,beaglebone black自带4GB eMMC Flash,什么时候树莓派要加一个就方便多了啊!
这些开源硬件都是运行的linux系统,从系统层面来说基本一致,不影响我们的学习。
从官网下载最新的稳定版libevent-2.0.22
我在beaglebone black上进行测试,首先写个简单的定时器
1. 解压
tar -xzf libevent-2.0.22-stable.gz cd libevent-2.0.22-stable
2. 编译
./configure make make install
g++ -levent -o libevent_timer libevent_timer.cpp
./libevent_timer
TCP 服务器测试
编译
g++ -levent -o libevent_tcp libevent_tcpserver.cpp
测试
./libevent_tcp
使用nodejs编写测试客户端
使用的源代码打包
可能是我的SD卡质量不行,金士顿和闪迪的都试过,用一段时间就会出文件系统错误。必须重新刷机才行。