C++ linux epoll并发服务器模型初探

简介: socket通讯流程图 最简单的可以通讯的C++服务器端代码:#include #include #include #include #include #include #define SERV_PORT 8000int main(vo...

socket通讯流程图
这里写图片描述
最简单的可以通讯的C++服务器端代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define SERV_PORT  8000

int main(void)
{
    int lfd, cfd;
    struct sockaddr_in serv_addr, clin_addr;
    socklen_t clin_len;
    char buf[1024];
    int len;
    //AF_INET ipv4   SOCK_STREAM:tcp
    lfd = socket(AF_INET, SOCK_STREAM, 0);

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); //ip
    serv_addr.sin_port = htons(SERV_PORT); // host to 网络序 大端序
    //IP+PORT 泛型指针  void *
    bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

    listen(lfd, 128);

    clin_len = sizeof(clin_addr);
    cfd = accept(lfd, (struct sockaddr *)&clin_addr, &clin_len);
    len = read(cfd, buf, sizeof(buf));

    write(STDOUT_FILENO, buf, len);
    close(lfd);
    close(cfd);
}

操作步骤:
1. 通过vim server.c创建一个c文件按下i键->写完上面的代码之后->esc->wq保存
2. 编写简单的makefile用于编译代码文件
gcc server.c -o server
3. 在控制台输入make,会自动生成一个server.c的可运行文件server
4. 在控制台输入./server,启动服务器
这里写图片描述
5. 客户端模拟测试
这里写图片描述
或者nc 192.168.1.126 8000 nc是netcat的


epoll模型
原理图
这里写图片描述
三个核心函数:
epoll_create(1024) 参数是节点大小,但现在linux已经废弃这个参数了,能插入多少个节点,取决于服务器内存大小
epoll_ctl() 添加/修改/删除监控文件的描述符
epoll_wait() 监控阻塞

文件拷贝命令: scp 文件 webdev@123.57.211.212:/home/webdev
查看端口信息: sudo netstat -apn | grep :8000

基于epoll模型的开源框架
libevent
libev
nginx
木铎(C++)

epoll代码待续

相关文章
|
4月前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
1月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
46 5
|
1月前
|
Linux 数据库
Linux内核中的锁机制:保障并发操作的数据一致性####
【10月更文挑战第29天】 在多线程编程中,确保数据一致性和防止竞争条件是至关重要的。本文将深入探讨Linux操作系统中实现的几种关键锁机制,包括自旋锁、互斥锁和读写锁等。通过分析这些锁的设计原理和使用场景,帮助读者理解如何在实际应用中选择合适的锁机制以优化系统性能和稳定性。 ####
62 6
|
2月前
|
数据可视化 Linux 网络安全
如何使用服务器训练模型
本文介绍了如何使用服务器训练模型,包括获取服务器、访问服务器、上传文件、配置环境、训练模型和下载模型等步骤。适合没有GPU或不熟悉Linux服务器的用户。通过MobaXterm工具连接服务器,使用Conda管理环境,确保训练过程顺利进行。
131 0
如何使用服务器训练模型
|
2月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
386 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
存储 PyTorch API
NVIDIA Triton系列09-为服务器添加模型
本文介绍了如何为NVIDIA Triton模型仓库添加新模型。通过示例模型`inception_graphdef`的配置文件`config.pbtxt`,详细解释了模型名称、平台/后端名称、模型执行策略、最大批量值、输入输出节点及版本策略等配置项。内容涵盖了模型的基本要素和配置细节,帮助读者更好地理解和使用Triton服务器。
41 0
|
2月前
|
机器学习/深度学习 人工智能 并行计算
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
45 0
|
2月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
38 0
|
3月前
|
并行计算 安全 调度
C++ 11新特性之并发
C++ 11新特性之并发
93 0
|
3月前
|
网络协议 数据处理 C语言
利用C语言基于poll实现TCP回声服务器的多路复用模型
此代码仅为示例,展示了如何基于 `poll`实现多路复用的TCP回声服务器的基本框架。在实际应用中,你可能需要对其进行扩展或修改,以满足具体的需求。
96 0