【网络编程】高性能并发服务器源码剖析

本文介绍了在网络编程中构建高性能并发服务器的方法,包括普通循环服务器、多进程和多线程并发模型,以及使用互斥锁实现单线程处理单个客户。作者提供了源码剖析和UML图示例,帮助读者理解并发服务器的工作原理和实现策略。

 

hello !大家好呀! 欢迎大家来到我的网络编程系列之洪水网络攻击,在这篇文章中,你将会学习到在网络编程中如何搭建一个高性能的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了解网络编程技术!!!

希望这篇文章能对你有所帮助,大家要是觉得我写的不错的话,那就点点免费的小爱心吧!

               

目录

一.网络服务器 

 1.1 普通循环网络服务器

2.2 简单并发网络服务器

2.2.1简单的并发服务器模型

2.2.2使用进程的并发服务器

2.2.3使用线程的并发服务器

2.2.4其他并发服务器模型

二.使用互斥锁实现单线程处理单个客户

2.1 具体步骤

2.2服务器代码模板

三.源码剖析


一.网络服务器 

 1.1 普通循环网络服务器

对于普通的循环网络服务器,其实就是服务器使用循环的方法逐个对客户的连接进行处理,处理完一个连接后再处理下一个连接,其过程如下:

最简单的代码模型我还是给大家:

#include<t_stdio.h>
#include<sys/types.h>          
#include <sys/socket.h>
#include<arpa/inet.h>
#include <sys/socket.h>
#include<ctype.h>
#include<unistd.h>
int main(void){
    struct sockaddr_in serv,cli;
    socklen_t cli_len;
    char buf[128];
    char IP[32];
    //创建一个通讯端点,返回该端点的文件描述符
    //创建一个ipv4的tcp连接端口
    int s_fd=socket( AF_INET ,SOCK_STREAM ,0);

    //需要对server变量成员初始化
    serv.sin_family=AF_INET;
    serv.sin_port=htons(5556);
    serv.sin_addr.s_addr=htonl(INADDR_ANY);
    //将s_fd和本地地址,端口号绑定
    int b=bind(s_fd,(struct sockaddr *)&serv,sizeof(serv));

    if(b==-1)E_MSG("bind",-1);
    if(s_fd==-1)E_MSG("socket",-1);
    //将s_fd设置为被动连接,监听客户端连接的到来 
    //将客户端到来的连接放入未决连接队列中
    //指定未决连接队列的长度
    listen(s_fd,5);
    while(1){
        //从s_fd设备的未连接队列中提取一个进程进行处理
        //返回一个连接描述符,使用这个连接描述符与客户端进行通讯
        int c_fd=accept(s_fd,(struct sockaddr *)&cli,&cli_len);
        if(c_fd==-1)E_MSG("accept",-1);
        //binary--->text
        inet_ntop(AF_INET,&cli.sin_addr,IP,32); 
        printf("client ip: %s\n",IP);
        //代码执行到这里,三次握手以及完成,可以进行数据传输了
        //从c_fd中读取客户端发送过来的请求信息
        int r = read(c_fd,buf,128);
        //处理客户端的请求信息
        int i;
         for(i=0;i<r;i++){
            buf[i]=toupper(buf[i]);
         }
         //将处理结果回送客户端
         write(c_fd,buf,r);
        //关闭本次连接
        close(c_fd);
    }

    return 0;
}

这是最简单的循环服务器代码,功能是将客户传过来的字符串全部转换为大写,这个最简单代码希望大家能全部弄懂,关于里面还有不懂的,可以去看我我前面的博客:[C++/Linux] socket套接字函数-优快云博客

2.2 简单并发网络服务器

并发网络服务器是指能够同时处理多个客户端请求的网络服务器。这种服务器的设计允许它在任何时刻处理多个客户端的连接和请求,而不会因为某个请求的处理而阻塞其他请求。并发服务器可以提高资源的利用率,增强服务器的响应能力,是现代网络应用的基础。下面我将介绍几种常见的并发网络服务器模型:

2.2.1简单的并发服务器模型

  1. 迭代服务器(Iterative Server): 这种服务器一次处理一个请求。它接收一个请求,处理完该请求,然后才接收下一个请求。这种模型简单,但效率低下,因为它在处理一个请求时不能处理其他请求。

  2. 并发服务器(Concurrent Server): 并发服务器可以同时处理多个请求。这通常通过多进程或多线程来实现。服务器的主进程或线程监听端口,接受新的连接,然后为每个连接创建一个新的进程或线程来处理请求。

评论 56
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值