线程池请见上一遍blog,且说下如何使用此框架。
环境:Ubuntu 12.04 g++ 4.6.3
解压附件AdvServer.zip到linux机器上的目录,然后解压,进入到AdvServer/src,用户可直接修改main.cc然后make,编译结果为AdvServer/src/main
服务器接口定义:
/********************** * Copyrigth (c) 2013,lonelyc++ * All rights reserved * * @file:tcpserver.h * @desc:tcpserver definion * @author:liyuanchi * @date:2013-10-20 **********************/ #ifndef __TCPSERVER_H_ #define __TCPSERVER_H_ #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <pthread.h> typedef struct client_conn_t { int connfd; struct sockaddr_in *client; }client_conn_t; typedef struct tcpserver_t tcpserver_t; /** * @function tcpserver_create * @descCreates a tcpserver_t object. * @param server_port port * @max_client_conn # of client conn * @param thr_num thread num * @param max_thr_num max thread size * @param task_queue_size size of the queue. * @return a newly created thread pool or NULL */ tcpserver_t* tcpserver_create(int server_port, int max_client_conn, int min_thr_num, int max_thr_num, int task_queue_size); /** * @function tcpserver_startup * @desc startup server do void *(*routine)(client_conn_t *) * @param tcpserver * @param void *(*routine)(client_conn_t *) */ void tcpserver_startup(tcpserver_t *tcpserver, void *(*routine)(void *)); /** * @function tcpserver_shutdown * @desc Stops and destroys a tcpserver. * @param tcpserver server to shutdown. */ void tcpserver_shutdown(tcpserver_t *tcpserver); #endif
如何使用此框架?
1、#include "tcpserver.h"
2、创建一个tcp服务器详细参数详见接口说明。
tcpserver_t *tcpserver = tcpserver_create(12345,10,2,5,100);
3、定义好自己的业务处理函数,void *process_client(void *client_conn)
注意:此处参数必须是此类型client_conn_t *conn = (client_conn_t *)client_conn;
4、调用接口启动此tcp服务器。tcpserver_startup(tcpserver, process_client);
/* ============================================================================ Name : main.c Author : liyuanchi Version : Copyright : huasi Description : main ============================================================================ */ #include "tcpserver.h" #include <stdio.h> #include "common.h" #include <malloc.h> #include <string.h> void *process_client(void *client_conn); int main() { tcpserver_t *tcpserver = tcpserver_create(12345,10,2,5,100); if (tcpserver == NULL) { printf("tcp server create fail"); return -1; } tcpserver_startup(tcpserver, process_client); return 0; } void *process_client(void *client_conn) { client_conn_t *conn = (client_conn_t *)client_conn; int read = 0; char recvbuf[BUF_SIZE]; while ((read = recv(conn->connfd, recvbuf, BUF_SIZE, 0)) != 0) { recvbuf[read] = '\0'; printf("recv from client: %s\n",recvbuf); if (strcmp(recvbuf, "bye") == 0) { break; } } }