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代码待续

相关文章
|
2月前
|
算法 Linux 测试技术
Linux C++开发中的代码优化之道:把握时机与策略
Linux C++开发中的代码优化之道:把握时机与策略
50 0
|
25天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
51 6
|
2月前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
74 0
|
2月前
|
算法 C++ 开发者
【C++ 20 并发工具 std::barrier】掌握并发编程:深入理解C++的std::barrier
【C++ 20 并发工具 std::barrier】掌握并发编程:深入理解C++的std::barrier
52 0
|
2月前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
76 0
|
8天前
|
存储 Linux C++
【进厂修炼 - First week】Linux & C++
【进厂修炼 - First week】Linux & C++
|
13天前
|
网络协议 Linux Shell
【linux网络(一)】初识网络, 理解四层网络模型
【linux网络(一)】初识网络, 理解四层网络模型
|
13天前
|
Linux C++
【代码片段】Linux C++打印当前函数调用堆栈
【代码片段】Linux C++打印当前函数调用堆栈
13 0
|
2月前
|
数据采集 缓存 Linux
Linux C++ 应用开发:在Linux单线程应用中精确把握空闲时机
Linux C++ 应用开发:在Linux单线程应用中精确把握空闲时机
67 1
|
2月前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
85 2