在linux环境下,可以用 epoll 实现高性能/高并发的服务器。因为只需在linux下,不想用libevent等较为复杂的库,所以自己造了个小轮子,主要有以下特点:
- 纯c实现
- 接收实现了个可自动扩展的buffer,用户无需自己维护,只要关心业务逻辑
- 回调函数机制,灵活方便
主要接口:
typedef void(*recv_callback)(int, const char *, unsigned int);
//handler 为用户主要实现的业务处理回调
poll_server_t *epoll_server_init(unsigned port, recv_callback handler, int max_client);
void epoll_server_start(epoll_server_t *server);
void epoll_server_delete(epoll_server_t *server);
下面为一个 echo server的例子:
#include <stdio.h>
#include <stdlib.h>
#include "epollServer.h"
int main(int argc, char *argv[])
{
epoll_server_t *evs;
if(argc < 2){
printf("Usage: %s [port]\n", argv[0]);
return -1;
}
evs = epoll_server_init(atoi(argv[1]), recv_echo_callback, 1024);
if(NULL == evs){
printf("epoll_server_init failed.\n");
return -1;
}
epoll_server_start(evs);
epoll_server_delete(evs);
return 0;
}
void recv_echo_callback(int cliFd, const char *data, unsigned int len)
{
send(cliFd, data, len, 0);
}
具体实现放到了github:https://github.com/NerDante/epollServer
欢迎star,错误指正。