首页 > 系统相关 >C++ linux epoll并发服务器模型初探

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

时间:2023-04-27 12:32:26浏览次数:65  
标签:lfd addr epoll C++ server len linux include


socket通讯流程图

C++ linux epoll并发服务器模型初探_控制台输入


最简单的可以通讯的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,启动服务器

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


5. 客户端模拟测试

C++ linux epoll并发服务器模型初探_控制台输入_03


或者nc 192.168.1.126 8000 nc是netcat的


epoll模型

原理图

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


三个核心函数:

epoll_create(1024) 参数是节点大小,但现在linux已经废弃这个参数了,能插入多少个节点,取决于服务器内存大小

epoll_ctl() 添加/修改/删除监控文件的描述符

epoll_wait() 监控阻塞

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

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

epoll代码待续


标签:lfd,addr,epoll,C++,server,len,linux,include
From: https://blog.51cto.com/dingxiaowei/6230545

相关文章

  • Linux安装JDK1.8
    1.创建Linux软件目录并进入data目录mkdir/datacddata/  2.创建java目录,并进入java目录mkdirjavacdjava 3.上传"jdk-8u181-linux-x64.tar.gz"文件,到当前目录(/data/java)jdk文件地址:https://www.123pan.com/s/QcP7Vv-FrH8d.html 4.解压安装JDK(jdk-8u1......
  • Linux shell regular expression All In One
    LinuxshellregularexpressionAllInOneLinuxshell正则表达式demos(......
  • 从零开始基于Archlinux 安装 containerd + k8s
    下载ISO文件:https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/目录1.准备工作2.磁盘管理2.1磁盘分区2.2磁盘格式化2.3磁盘挂载3.安装系统3.1安装系统文件3.2配置fstab3.3配置系统3.4安装引导程序3.5安装OpenSSH3.6主机名3.7设置root密码3.8网络配置3.......
  • VMware虚拟机Linux动态扩容磁盘空间
    Vmware中虚拟机使用时间长,发现磁盘空间不够,有些情况是无法新加新硬盘扩容到虚拟机中,因为有些数据不好移动或数据目录无法修改。所以,在不加新的硬盘情况下,VMware中直接在原来的硬盘上新增空间扩容。操作思路是,硬盘增加空间、虚拟机硬盘fdisk分区、扩展卷组、扩容逻辑卷、重新定义......
  • 用C++编写一个简单的发布者和订阅者
    摘要:节点(Node)是通过ROS图进行通信的可执行进程。本文分享自华为云社区《编写一个简单的发布者和订阅者》,作者:MAVER1CK。@[toc]参考官方文档:Writingasimplepublisherandsubscriber(C++)背景节点(Node)是通过ROS图进行通信的可执行进程。在本教程中,节点将通过话题(To......
  • win10下复制ssh公钥到linux
    win10端已经生成了ssh的公钥。在powershell中使用ssh-copy-id命令,提示如下:ssh-copy-id:Theterm'ssh-copy-id'isnotrecognizedasanameofacmdlet,function,scriptfile,orexecutableprogram.Checkthespellingofthename,orifapathwasincluded,verify......
  • Linux文件和目录删除
    今天只讲一个命令,这个命令已经让万千运维人既爱又恨。rm删除文件或者目录基本用法:-i显示删除提示信息-f 强制删除文件-r进行目录的递归删除在公司里为了保证数据安全,一般会创建一个alias;aliasrm='rm-i'也有时候我们会写一个脚本来防止误删除,不过作为运维人员,备份很重要,......
  • 【linux】循序渐进学运维-CentOS7基本配置
    文章目录1.固定可以联网的IP使用命令修改IP打开网卡配置文件vim/etc/sysconfig/network-scripts/ifcfg-ens32问题1:如果设置了之后,还是无法ping通百度,是什么原因?2.关闭防火墙并设置开机自动关闭3.设置selinux开机自动关闭1)临时关闭2)开机自动关闭4.设置光盘开机自动挂载5.......
  • 【linux】循序渐进学运维-cat
    文章目录功能:连接文件和标准输出打印常用选项:实例:1.显示文件内容2.合并文件内容3.查看文件且加上行号4.空行不加行号5.空号合并成一行,并且不加行号6.空行合并成一行并加行号补充cat功能:连接文件和标准输出打印常用选项:语法:cat(参数)(选项)-n或--number:由1开始对所有输出的......
  • 【linux】循序渐进学运维-MySQL-索引
    文章目录索引的概念索引概念1.索引的优点:2.索引的缺点:索引的类型:1普通索引2.唯一索引3.主键索引4.复合索引5.全文索引(FULLTEXTINDEX)索引设计原则面试题索引的概念索引概念索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的......