我的套接字服务器每秒接收超过 5,000 个数据包,数据将保存到数据库中。
问题是处理数据(调用存储过程,选择一些行..)到数据库比从套接字接收数据慢。结果,套接字接收缓冲区结束后,套接字无法接收所有数据。
简单的例子在这里。
do_something(char *buf, char *res) {
/*
call some database stored procedures and get the result
this part makes bottle neck.
*/
}
接收数据(..) {
而(1){
n = epoll_wait( efd, events, EPOLL_SIZE, -1 );
if( -1 == n ) {
perror( "epoll wait error" );
}
for( i=0; i<n; i++ ) {
if( events[i].data.fd == sfd ) {
/* accept code */
} else {
memset( buf_in, 0x00, 256 );
readn = read( events[i].data.fd, buf_in, 255 );
if( readn <= 0 ) {
/* close connection */
} else {
do_something( buf_in, result ); /* the function treats data into dbms */
write( events[i].data.fd, res, 255 ); /* ack the result */
}
}
}
}
}
我的问题是
我必须将数据处理部分与接收数据分开吗?
我只是增加 do_somthing 函数的性能吗?