Skip to content

askipfish/libev_util

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

在libevent 上封装一个简单网络库,方便构建 TCP/UDP/UNIX 服务端,和客户端。

  1. 支持长连接和短连接。
  2. 服务端可以支持每妙处理请求,5W/qps, 每核。
  3. 信息接收采用预分配加动态调整,性能和内存取得很好的平衡。
  4. 支持定时回调上层逻辑

接口例子:

int ts_accept_fun(int sfd, int cfd, struct sockaddr *addr, int addrLen)
{
fprintf(stderr, "[srv] accept srv_fd: %d, cli_fd: %d, addrLen: %d\n", sfd, cfd, addrLen);
return 0;
}

// pkg 是个完整的应用层协议包,headCmd 是客户端用来标示pkg解包协议
int ts_pkg_fun(int sock, struct sockaddr *addr, unsigned int addrLen, const char *pkg, unsigned int pkgLen, unsigned int headCmd)
{
fprintf(stderr, "[srv] sock: %d, pkg: %s, pkg_len: %d, head_cmd: %d\n", sock, pkg, pkgLen, headCmd);
return 0;
}

int ts_close_fun(int sock)
{
fprintf(stderr, "[srv] cli sock: %d close\n", sock);
return 0;
}

int ts_timer_fun()
{
fprintf(stderr, "[srv] timer exec, time: %d\n", time(NULL));
return 0;
}

void test_tcp_srv()
{
const char *ip = "127.0.0.1";
unsigned int port = 1235;

ev_srv_init(&evSrv);

  int iRet = ev_srv_bind_ip(&evSrv, ip, port, ts_accept_fun, ts_pkg_fun, ts_close_fun, 0, -1, 5);
  YG_ASSERT_RET(iRet > 0, );

  iRet = ev_srv_add_timer(&evSrv, ts_timer_fun, 1000 * 3);
  YG_ASSERT_RET(iRet >= 0, );

ev_srv_run(&evSrv);
}

测试:

  1. 编译测试 cd test; make;
  2. 启动测试服务端 ./test_ev tcp_srv;
  3. 启动测试客户端 ./test_ev tcp_cli;

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published