1 Star 0 Fork 345

Khail / swoole

forked from winting / swoole 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
server.c 3.39 KB
一键复制 编辑 原始数据 按行查看 历史
韩天峰 提交于 2013-12-05 13:34 . 增加定时器
/**
* gcc -o server server.c -lswoole
*/
#include <swoole/Server.h>
#include <swoole/swoole.h>
#include <swoole/Client.h>
int my_onReceive(swFactory *factory, swEventData *req);
void my_onStart(swServer *serv);
void my_onShutdown(swServer *serv);
void my_onConnect(swServer *serv, int fd, int from_id);
void my_onClose(swServer *serv, int fd, int from_id);
void my_onTimer(swServer *serv, int interval);
void my_onWorkerStart(swServer *serv, int worker_id);
void my_onWorkerStop(swServer *serv, int worker_id);
char* php_rtrim(char *str, int len)
{
int i;
for (i = len; i > 0; i--)
{
switch(str[i])
{
case ' ':
case '\0':
case '\n':
case '\r':
case '\t':
case '\v':
str[i] = 0;
break;
default:
return str;
}
}
return str;
}
int main(int argc, char **argv)
{
int ret;
swServer serv;
swServer_init(&serv); //初始化
//config
serv.backlog = 128;
serv.poll_thread_num = 2; //reactor线程数量
serv.writer_num = 2; //writer线程数量
serv.worker_num = 4; //worker进程数量
serv.factory_mode = SW_MODE_PROCESS; //SW_MODE_PROCESS SW_MODE_THREAD SW_MODE_BASE
serv.max_conn = 100000;
//serv.open_cpu_affinity = 1;
//serv.open_tcp_nodelay = 1;
//serv.daemonize = 1;
//serv.open_eof_check = 1;
//create Server
ret = swServer_create(&serv);
if (ret < 0)
{
swTrace("create server fail[error=%d].\n", ret);
exit(0);
}
//swServer_addListen(&serv, SW_SOCK_UDP, "127.0.0.1", 9500);
swServer_addListen(&serv, SW_SOCK_TCP, "127.0.0.1", 9501);
//swServer_addListen(&serv, SW_SOCK_UDP, "127.0.0.1", 9502);
//swServer_addListen(&serv, SW_SOCK_UDP, "127.0.0.1", 8888);
//swServer_addTimer(&serv, 2);
//swServer_addTimer(&serv, 4);
serv.onStart = my_onStart;
serv.onShutdown = my_onShutdown;
serv.onConnect = my_onConnect;
serv.onReceive = my_onReceive;
serv.onClose = my_onClose;
serv.onTimer = my_onTimer;
serv.onWorkerStart = my_onWorkerStart;
serv.onWorkerStop = my_onWorkerStop;
ret = swServer_start(&serv);
if (ret < 0)
{
swTrace("start server fail[error=%d].\n", ret);
exit(0);
}
return 0;
}
void my_onWorkerStart(swServer *serv, int worker_id)
{
printf("Worker[%d]PID=%d start\n", worker_id, getpid());
}
void my_onWorkerStop(swServer *serv, int worker_id)
{
printf("Worker[%d]PID=%d stop\n", worker_id, getpid());
}
void my_onTimer(swServer *serv, int interval)
{
printf("Timer Interval=[%d]\n", interval);
}
static int receive_count = 0;
int my_onReceive(swFactory *factory, swEventData *req)
{
int ret;
char resp_data[SW_BUFFER_SIZE];
swSendData resp;
receive_count ++;
resp.info.fd = req->info.fd; //fd can be not source fd.
resp.info.len = req->info.len + 8;
resp.info.from_id = req->info.from_id;
req->data[req->info.len] = 0;
snprintf(resp_data, resp.info.len, "Server:%s", req->data);
resp.data = resp_data;
ret = factory->finish(factory, &resp);
if (ret < 0)
{
printf("send to client fail.errno=%d\n", errno);
}
printf("onReceive[%d]: Data=%s|Len=%d\n",receive_count, php_rtrim(req->data, req->info.len), req->info.len);
return SW_OK;
}
void my_onStart(swServer *serv)
{
printf("Server is running\n");
}
void my_onShutdown(swServer *serv)
{
printf("Server is shutdown\n");
}
void my_onConnect(swServer *serv, int fd, int from_id)
{
printf("PID=%d\tConnect fd=%d|from_id=%d\n", getpid(), fd, from_id);
}
void my_onClose(swServer *serv, int fd, int from_id)
{
printf("PID=%d\tClose fd=%d|from_id=%d\n", getpid(), fd, from_id);
}
1
https://gitee.com/Khail/swoole.git
git@gitee.com:Khail/swoole.git
Khail
swoole
swoole
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891