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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 端容器之 WKWebView 那些事

简介&#xff1a; 本文主要是关于在端容器设计开发过程中&#xff0c;WKWebView 使用上遇到的一些问题和解决办法。 一 背景 熟悉 iOS\macOS Hybrid 混合开发的同学应该都有体会&#xff0c;WKWebView 虽然是苹果作为替代 UIWebView\WebView 而推出的"新"组件&…

95后热搜哪些事,夸克用AI引擎发布2021年度关键词

编辑 | 宋慧 出品 | CSDN 云计算 岁末将至&#xff0c;哪些心潮澎湃的瞬间与难以忘怀的言语&#xff0c;能够代表你的2021&#xff1f; 12月14日&#xff0c;在夸克Meet AI开放日上&#xff0c;阿里巴巴智能信息事业群旗下的智能搜索APP夸克与中国传媒大学互联网信息研究院联合…

MaxCompute Spark 资源使用优化祥解

简介&#xff1a; 本文主要讲解MaxCompute Spark资源调优&#xff0c;目的在于在保证Spark任务正常运行的前提下&#xff0c;指导用户更好地对Spark作业资源使用进行优化&#xff0c;极大化利用资源&#xff0c;降低成本。 本文作者&#xff1a;吴数傑 阿里云智能 开发工程师 …

tika设置文件长度限制_MySQLInnoDB某些你没注意过的限制

01—目录02—前言最近一个朋友遇到一个面试题&#xff1a;MySQL的InnoDB的一个表最多能存多少数据&#xff1f;这么一问&#xff0c;我瞬间也蒙圈了&#xff0c;这是我的知识盲区啊&#xff0c;之前还从来没考虑过这样的问题。那我怎么能甘心的&#xff0c;只好去网上一顿查资料…

mysql 查询auto_increment_MySQL查询数据表的Auto_Increment(自增id)

1.一般数据表的id都是设置成auto_increment的&#xff0c;所以当插入一条记录后&#xff0c;可以使用下面的命令来获取最新插入记录的id值select last_insert_id();注意&#xff1a;1. 必须是在使用Insert语句后&#xff0c;紧接着使用select last_insert_id()才有效&#xff0…

如何保证 Serverless 业务部署更新的一致性?

简介&#xff1a; 代码在其他场景被更新&#xff0c;需要我们在当前得到感知&#xff0c;这个事情其实是非常重要的&#xff0c;和代码的安全发布密不可少。而此时&#xff0c;通过 Serverless Devs 是可以做到的。 作者&#xff5c;Anycodes 从我做 Serverless 工具开始&…

Gartner最新报告:阿里云计算、存储、网络、安全均获得最高分

12月15日&#xff0c;国际权威机构Gartner发布最新报告&#xff0c;全面评估全球顶级云厂商整体能力。阿里云IaaS基础设施能力拿下全球第一&#xff0c;在计算、存储、网络、安全四项核心评比中均斩获最高分&#xff0c;这也是中国云首次超越亚马逊、微软、谷歌等国际厂商。 《…

为什么DevOps的必然趋势是BizDevOps

简介&#xff1a; 从精益思想出发&#xff0c;我们可以看到DevOps的必然发展方向&#xff0c;那就是向业务侧延伸。业务是产品开发和运维的源头&#xff0c;完整的价值流必须从源头开始。这不是预测&#xff0c;而是正在发生的事实。 编者按&#xff1a;本文源自阿里云云效团队…

大一微积分笔记整理_大一高等数学学习方法

数学的逻辑性、分析性极强&#xff0c;可以说是一种纯理性的科学&#xff0c;要求思维清晰明了&#xff0c;因而基础知识十分重要&#xff0c;那么大一的同学该如何学习高数呢?下面是由小编整理的&#xff0c;希望对您有用。一学习方法与学习的过程、阶段、心理条件等有着密切…

软件工程软件产品质量要求与评价_软件质量保证(Quality Assurance)中常见的活动...

质量保证QA关注在软件产品生成的整个过程&#xff0c;主要验证软件产品开发过程中相关实施过程的完整性、一致性和有效性&#xff0c;确保开发活动和测试活动等遵循正确的过程&#xff0c;为软件产品达到合适的质量级别提供信心。为了实现过程的可重用性和持续改进&#xff0c;…

普诺飞思公布发明者社区,启发基于事件视觉技术的创新

2021 年 12 月 15 日&#xff0c;全球领先的神经拟态视觉传感公司普诺飞思&#xff08;Prophesee&#xff09;正式对外公开其发明者社区&#xff0c;展示基于事件的 Metavision 技术的工作及技术创新成果。该发明者社区创建于 2014 年&#xff0c;由来自各行业的研究人员、学者…

揭秘!业界创新的代码仓库加密技术

简介&#xff1a; 原理与演示。 01 / 什么是代码加密&#xff1f; 云端加密代码服务是云效团队的自研产品&#xff0c;是目前国内率先支持代码加密的托管服务&#xff0c;也是目前世界范围内率先基于原生Git实现加密方案的代码托管服务。 通过在云端对托管在云效Codeup的代码…

360 政企安全集团基于 Flink 的 PB 级数据即席查询实践

简介&#xff1a; Threat Hunting 平台的架构与设计&#xff0c;及以降低 IO 为目标的优化与探索。为什么以及如何使用块索引。 本文整理自 360 政企安全集团的大数据工程师苏军以及刘佳在 Flink Forward Asia 2020 分享的议题《基于 Flink 的 PB 级数据即席查询实践》&#xf…

支持mysql的报表开发工具_你不知道的mysql的3W法,内附超好用的报表工具

WHAT? 什么是MySQL?MySQL是一种关系型数据库管理系统&#xff0c;关系数据库将数据保存在不同的表中&#xff0c;而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性。WHY&#xff1f;为什么需要MySQL工具&#xff1f;MySQL现已经成为大多数中小企…

中文巨量模型“源1.0”的学习优化方法

最近&#xff0c;浪潮人工智能研究院发布了中文巨量模型“源1.0”&#xff0c;参数量达2457亿&#xff0c;超越美国OpenAI组织研发的GPT-3。“源1.0”在语言智能方面表现优异&#xff0c;获得中文语言理解评测基准CLUE榜单的零样本学习&#xff08;zero-shot&#xff09;和小样…

python一箭穿心代码_一箭穿心源代码

#include #include //提供system()函数int main(void) {printf("送给你—亲爱的\n");printf(" * * * * * * * * * *\n"); printf(" * * * * * ** * \n"); printf(&q…

阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路

简介&#xff1a; 阿里云在 2020年底提出了“三位一体”理念&#xff0c;目标是希望将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系&#xff0c;令技术的价值可以达到最大化。Dubbo 3.0 作为三位一体架构的首推方案&#xff0c;在集团内被寄予了厚望。它完美融…

淘宝小部件:全新的开放卡片技术!

简介&#xff1a; 淘宝的开放技术目前主要有两种形态&#xff0c;第一种是小程序&#xff0c;第二种是今天的主角小部件。它是基于小程序技术体系&#xff0c;面向标准化、轻量化、高性能的开放卡片场景。本文我们将通过技术设计策略、核心技术设施、业务场景接入、技术演进路线…

hadoop上传文件java_hadoop入门之通过java代码实现将本地文件上传到hadoop的文件系统...

第一步&#xff1a;首先搭建java的编译环境。创建一个Java Project工程&#xff0c;名为upload。第二步&#xff1a;选中所需的Jar包。选中JRE System Library 选择BuildPath Configure Build Path 选择hadoop相应的jar包。通过Add External JARS --〉Hadoop-0.20.2下所有的jar…

外卖和快递行业数据_抢人大战愈演愈烈,东莞再现用工荒!不只流向外卖、快递等行业...

12月初&#xff0c;距离过年只有两个月的时间。按照往年惯例&#xff0c;这并不是一个大肆招人的好时机。然而世界工厂中国&#xff0c;一场抢人大战却于此时低调地打响&#xff0c;在东莞&#xff0c;不少工厂亲身上阵&#xff0c;在厂区附近的大街小巷拉满横幅&#xff0c;贴…