您的位置:首页 > 运维架构 > Linux

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

2015-08-08 18:37 776 查看
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代码待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: