并发服务器
前言
并发服务器
思想:多任务处理机制(多线程或者多进程),分别为每个客户端创建一个任务来处理,极大的提高了服务器的并发处理能力
这里是以TCP服务器为例
一、多进程创建服务器
父进程负责建立连接
子进程负责与客户端的数据交互
不足:
(1)每个进程都需要单独分配内存空间,客户端越多, 则进程越多,就会消耗更多的资源 。
(2)进程之间的协同需要进程间通讯。
1.多进程服务器
代码如下:
int main(int argc, char **argv)
{
int ret;
pid_t pid;
int sfd,cfd;
struct sockaddr_in src,cli;
socklen_t len = sizeof(src);
socklen_t addrlen = sizeof(cli);
if(signal(SIGCHLD, sig_handler) == SIG_ERR)//子进程状态改变,会给父进程发送SIGCHLD信号,这里处理方式为自定义方式 进入sig_handler信号处理函数
{
perror("");
return -1;
}
sfd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字,第二个参数为流式套接字类型
if(sfd == -1)
{
perror("socket fail");
return -1;
}
src.sin_family = AF_INET;//服务器地址结构体填充,地址族,IP PORT
src.sin_port = htons(atoi(argv[2]));
src.sin_addr.s_addr = inet_addr(argv[1]);
ret = bind(sfd, (const struct sockaddr *)&src, len );//绑定套接字,服务器ip和port口号
if(ret == -1)
{
perror("bind");
return -1;
}
ret = listen(sfd, BACKLOG);