线程池请见上一遍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;
}
}
}
转载于:https://blog.51cto.com/lonelyc/1315439