网络编程(并发服务器)-----------华清远见

本文探讨了如何构建并发服务器,通过多进程和多线程的方法提高服务器的并发处理能力。在多进程服务器中,父进程建立连接,子进程处理数据交互,但会消耗更多资源。而在多线程服务器中,每个连接请求触发一个子线程,实现更高效利用资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发服务器


前言

并发服务器
思想:多任务处理机制(多线程或者多进程),分别为每个客户端创建一个任务来处理,极大的提高了服务器的并发处理能力
这里是以TCP服务器为例
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值