C++ linux epoll并发服务器模型初探
2015-08-08 18:37
776 查看
socket通讯流程图
![](https://img-blog.csdn.net/20150808170932202)
最简单的可以通讯的C++服务器端代码:
操作步骤:
1. 通过vim server.c创建一个c文件按下i键->写完上面的代码之后->esc->wq保存
2. 编写简单的makefile用于编译代码文件
gcc server.c -o server
3. 在控制台输入make,会自动生成一个server.c的可运行文件server
4. 在控制台输入./server,启动服务器
![](https://img-blog.csdn.net/20150808170221030)
5. 客户端模拟测试
![](https://img-blog.csdn.net/20150808170103361)
或者nc 192.168.1.126 8000 nc是netcat的
epoll模型
原理图
![](https://img-blog.csdn.net/20150808172943702)
三个核心函数:
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代码待续
最简单的可以通讯的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代码待续
相关文章推荐
- python2.7和pip在linux下的安装详解
- 两台Linux服务器在局域网之间传输文件
- /etc/rc.d/rc.local 自动加载linux 脚本
- linux insmod error ko文件
- linux-vfs : inode number
- [Sqlite] --> Sqlite于Windows、Linux 和 Mac OS X 在安装过程
- Linux常用命令大全
- linux系统的颜色配置
- Linux LVM 磁盘管理
- linux下vi命令大全
- linux下的so、o、lo、a、la文件的区别
- Linux网卡数据包的接收
- (大数据工程师学习路径)第一步 Linux 基础入门----简单的文本处理
- Linux高并发机制——epoll模型
- linux 死机 处理 reisub
- (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道
- Linux根文件系统详解
- [转载] 分析Linux内核创建一个新进程的过程
- DAY_18_linux/list.h
- LINUX系统安装