linux mysql 开启异步io_Linux 异步IO介绍
使用范例:
epoll最多的用途就是socket编程,可以大大提高服务器的性能,此处我们实现一个简单的http服务器。 #define MAXFDS 128
#define EVENTS 100
#define PORT 8080
#define MAXEPOLLSIZE 1024*10
typedef enum
{
false,
true
}bool;
/***************定义处理socket的回调函数类型***********/
typedef int (*socket_pro)(int fd,void *data);
/***************定义回调函数的用户数据***********/
typedef struct userdata
{
int fd;
socket_pro cb;
}userdata_t;
static int epfd;//epoll句柄
/***************发送一个文件数据的函数***********/
static void cws_client_request (int connfd,void *data)
{
struct epoll_event ev = {0};
char buffer[1024*8] = {0};
int ret;
char *requestPath = NULL;
char tmpPath[512] = {"./www/"};
int pagesize = 0;
ret = recv (connfd, buffer, sizeof (buffer) -1, 0);
if (ret > 0)
{
if (strncmp (buffer, "GET ", 4) != 0)
{
printf("bad request.\n");
}
if (strncmp (buffer, "GET /", 5) == 0)
{
if (strncmp (buffer, "GET / ", 6) == 0)
{
strcat(tmpPath, "/index.html");
requestPath = tmpPath;
}
else
{
requestPath = buffer+5;
char * pos = strstr(buffer+5, " ");
strncat(tmpPath, requestPath, pos - requestPath);
requestPath = tmpPath;
}
}
char * badRequest = (char *)"Error 404 Not Found.";
char * httpStatus200 = (char *)"HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n";
FILE * fp = fopen(requestPath, "r");
FILE * connfp = fdopen(connfd, "w");
if ( connfp == NULL )
{
perror("fdopen error");//cout <
}
if (fp == NULL)
{
setlinebuf(connfp);
fwrite(badRequest, strlen(badRequest), 1, connfp);
fclose(connfp);
}
else
{
setlinebuf(connfp);
//fwrite(httpStatus200, strlen(httpStatus200), 1, connfp);
//fflush(connfp);
while ((ret = fread (buffer, 1, sizeof(buffer) -1, fp)) > 0)
{
fwrite(buffer, 1, ret, connfp);
pagesize += ret;
fflush(connfp);
}
printf("pagesize:%d\n",pagesize);//cout <
fclose(fp);
}
}
//1
close(connfd);
epoll_ctl (epfd, EPOLL_CTL_DEL, connfd, &ev);
}
/***************处理已经连接socket函数***********/
static int __process_data_fd(int fd,void *data)
{
struct epoll_event *ev = (struct epoll_event *)data;
cws_client_request(fd,ev);
free(data);
return;
}
/***************处理监听socket函数***********/
static int __process_listen_fd(int fd,void *data)
{
struct sockaddr_in caddr = {0};
struct epoll_event ev = {0};
int len = sizeof (caddr);
int cfd = accept (fd, (struct sockaddr *) &caddr, (socklen_t *) & len);
if (-1 == cfd)
{
perror("accpet error");//cout << "server has an error, now accept a socket fd" <
break;
}
setNonBlock (cfd);
userdata_t *cb_data = malloc(sizeof(userdata_t));
cb_data->fd = cfd;
cb_data->cb = __process_data_fd;
ev.data.ptr = cfd;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl (epfd, EPOLL_CTL_ADD, cfd, &ev);
return 0;
}
/***************设置描述符为非阻塞***********/
static bool setNonBlock (int fd)
{
int flags = fcntl (fd, F_GETFL, 0);
flags |= O_NONBLOCK;
if (-1 == fcntl (fd, F_SETFL, flags))
{
return false;
}
return true;
}
/***************主函数***********/
int main (int argc, char *argv[])
{
int listen_fd, nfds;
int on = 1;
char buffer[512];
struct sockaddr_in saddr, caddr;
struct epoll_event ev, events[EVENTS];
signal(SIGPIPE, SIG_IGN);
if (fork())
{
exit(0);
}
if (-1 == (listen_fd = socket(AF_INET, SOCK_STREAM, 0)))
{
perror("socket error");//cout << "create socket error!" << endl;
return -1;
}
epfd = epoll_create (MAXFDS);
setsockopt (listen_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on));
bzero (&saddr, sizeof (saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons ((short) (PORT));
saddr.sin_addr.s_addr = INADDR_ANY;
if (-1 == bind(listen_fd, (struct sockaddr *) &saddr, sizeof (saddr)))
{
perror("bind error");//cout << " cann't bind socket on server " << endl;
return -1;
}
if (-1 == listen (listen_fd, 32))
{
perror("listen error");//cout << "listen error" << endl;
return -1;
}
userdata_t *cb_data = (userdata_t *)malloc(sizeof(userdata_t));
cb_data->fd = listen_fd;
cb_data->cb = __process_listen_fd;
ev.data.ptr = cb_data;
ev.events = EPOLLIN|EPOLLET;
epoll_ctl (epfd, EPOLL_CTL_ADD, listen_fd, &ev);
for (;;)
{
int i;
nfds = epoll_wait (epfd, events, MAXFDS, -1);
for (i = 0; i < nfds; ++i)
{
userdata_t *cb_data = (userdata_t *)events[i].data.ptr;
cb_data.cb(cb_data.fd,cb_data);
}
}
if (listen_fd > 0)
{
shutdown (listen_fd, SHUT_RDWR);
close (listen_fd);
}
return 0;
}
linux mysql 开启异步io_Linux 异步IO介绍相关推荐
- linux mysql开远程访问,Linux mysql开启远程访问
默认情况下远程访问会出现 Can't connect to MySQL server on '192.168.10.18′ (10061) 错误 是因为,mysql的默认配置为了增强安全性,禁止了非本 ...
- linux mysql开启事务_linux mysql 相关操作命令
1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mys ...
- linux mysql 开启远程访问
mysql -u root -p mysql> grant all on *.* to user_name@'%' identified by 'user_password'; 转载于:http ...
- Linux如何开启和关闭防火墙
一.什么是防火墙? 防火墙是一种安全机制,可以保护计算机网络不受未经授权的访问和攻击.防火墙位于计算机网络的边缘,监控网络传输的流量,根据预设的规则过滤进出网络的数据包,阻止不安全的数据包进入网络,从 ...
- mysql 异步_MySQL -- 异步I/O
linux上,innodb使用异步IO子系统(native AIO)来对数据文件页进行预读和写请求.行为受到参数innodb_use_native_aio控制. 默认是开启的,且只是适用于linux平 ...
- MySQL 5.5 主从复制异步、半同步以及注意事项详解
大纲 一.前言 二.Mysql 基础知识 三.Mysql 复制(Replication) 四.Mysql 复制(Replication)类型 五.Mysql 主从复制基本步骤 六.Mysql 主从复制 ...
- 阻塞和非阻塞IO,异步和同步IO
从网上看到一遍比较好的博客介绍阻塞和非阻塞IO,异步和同步IO的区别和各自的使用场景,虽然是从网络套接字方面解析的,不过也是适合于对驱动文件的操作,毕竟套接字的本质也是一个文件描述符. 转载内容 本文 ...
- Mysql的IO介绍及原因详解
有输入输出类型的交互系统都可以认为是I/O系统. 目录 一.IO操作 二.IO成本 三.IO分类 四.Mysql网络层IO(网络IO) 五.Mysql存储IO(磁盘IO) 一.IO操作 在计算机系统中 ...
- python3 异步 非阻塞 IO多路复用 select poll epoll 使用
有许多封装好的异步非阻塞IO多路复用框架,底层在linux基于最新的epoll实现,为了更好的使用,了解其底层原理还是有必要的. 下面记录下分别基于Select/Poll/Epoll的echo ser ...
最新文章
- Linux下安装配置virtualenv与virtualenvwrapper
- CIO实施精细化管理的五个要点
- linux桌面系统ping在哪,Linux系统ping命令那些不为人知的选项
- 天平称重【递归解法】
- C语言#include还有些你不知道的事
- linux shell 执行目录,bash shell脚本执行的几种方法
- 淡黄色电子书阅读器网站模板
- Tom邮箱注册机|注册辅助工具!!!
- python实践项目(八)
- 飞鸽传书 linux,飞鸽传书Linux版
- 金融计算机求log,cfa计算器怎么算对数
- mysql 指数 类型_利用MYSQL挑选指数基金
- 你想靠AI实现永生吗?
- python自然语言_Python自然语言处理 - 随笔分类 - 牛皮糖NewPtone - 博客园
- 2007中文网志年会印象
- 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
- 迅雷 java_Java实现迅雷地址转成普通地址
- Git之版本回退和分支合并
- 智能机器人与智能系统(大连理工大学庄严教授)——3.工业机器人
- html5绘制图形渐变-径向渐变
热门文章
- 破五唯后,高校从“唯论文”变成了“唯纵向”?​
- 中国工程院院士,受聘一流大学院长
- 比特币的原理及运作机制
- 刚刚教育部发声:老师性骚扰学生 零容忍!“害群之马”将被严惩
- 如何用普通人能理解的语言解释量子纠缠?
- 重磅 | 第八届世界华人数学家大会将在清华大学举行
- node.js路由控制
- Spark提交 指定 kerberos 认证信息
- Python-OpenCV设置摄像头分辨率
- 庖丁解牛|图解 MySQL 8.0 优化器查询转换篇