node.js之类的语言可以实现异步的数据库查询功能,执行SQL语句之后不必等待数据库返回结果。继续去执行其他的代码,当数据库返回结果是再对数据进行处理,如渲染页面,并将HTML页面发送给客户端。这样应用程序完全不需要阻塞等待。这种方式运行效率非常高。
PHP中是否可以实现类似的异步非阻塞MySQL查询呢?使用github搜索发现一个项目貌似是做此功能的,https://github.com/kaja47/async-mysql,查看代码是基于React.PHP.的。但并不是真正的异步SQL。实现的原理是设置一个定时器,每0.02秒轮询一次。虽然也可以用,但这样很浪费CPU资源。不是真正的异步MYSQL。
现在Swoole1.6.2提供了swoole_event_add和swoole_get_mysqli_sock 2个新的函数,使用它完全可以实现真正的PHP异步MySQL。下面讲一下具体的实现。
代码:
$db = new mysqli;
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query("show tables", MYSQLI_ASYNC);
swoole_event_add(swoole_get_mysqli_sock($db), function($db_sock) {
global $db;
$res = $db->reap_async_query();
var_dump($res->fetch_all(MYSQLI_ASSOC));
swoole_event_exit();
});
首先连接mysql,连接成功后执行SQL语句,要在第二个参数指定MYSQLI_ASYNC。表示此查询为异步。query函数会立即返回,这时候并没有得到mysqli_result。
然后调用swoole_get_mysqli_sock函数取到mysql连接的socket,并调用swoole_event_add将它加入到swoole的epoll事件循环中。当数据库返回结果是会回调我们刚才制定的函数。
这时候再调用mysqli_reap_async_query得到result,调用fetch_all函数得到数据。
这个过程是完全异步非阻塞的,不存在任何浪费CPU的代码。这个代码还可以用在服务器端程序上,具体代码实现后续会再写一篇文章详细介绍。
分享到:
相关推荐
mysql-async 是基于 swoole 开发的 PHP 异步 MySQL 客户端,内置连接池和任务排队机制。基于 mysql-async 可以编写出纯异步、支持超高并发的 PHP 应用。
PHP异步并发访问mysql简单实现。 在实际的开发过程中,我们常常会遇到需要操作多张表,多个库的情况。有时因为一些限制我们不能进行连表(例如,异地数据库),所以只能用php串行访问后再在php里进行合并,有时还...
ECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息,通过本文给大家介绍如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据,需要的朋友参考下吧
Jquery+Ajax+Php+Mysql异步刷新 表单验证
主要介绍了PHP Swoole异步MySQL客户端实现方法,结合实例形式分析了php操作Swoole扩展异步mysql操作的面向对象实现方式,需要的朋友可以参考下
php swoole异步任务实现代码(包括服务器端、客户端),解决高并发问题
PHP实现页面异步刷新数据 一、实验环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3。 二、主要技术 本实验使用PHP基础知识、JQuery和AJAX知识实现页面异步交互...
用jQuery,结合PHP和Mysql,通过实例讲解如何实现Ajax数据加载效果。
全异步Swoole API开发框架,内置Promise,异步MySQL连接池,内存缓存管理,异步Task方案等
Sworm是一个基于Swoole的异步MySQL调用的ORM数据库框架。该框架封装了swoole_mysql,API与NotORM很相似。使用Sworm能更加轻松地生成查询语句,使代码结构更加清晰,返回更加规范。
Amp-mysql.zip,基于amp的php异步mysql客户端。,amp是php的一个非阻塞并发框架。它提供事件循环、承诺和流,作为异步编程的基础。
用于异步MySQL数据库客户端。 这是MySQL数据库驱动程序。 它实现了MySQL协议,并允许您访问现有MySQL数据库。 它是用纯PHP编写的,不需要任何扩展。 目录 安装 测验 执照 快速入门示例 本示例运行一个简单的...
使用构建的异步MySQL客户端。 amp/mysql是基于构建的异步MySQL客户端。 该库公开了一个基于Promise的API,可以动态地同时查询多个MySQL连接。 客户端在可扩展的可用连接池中透明地分配这些查询,并使用100%用户级...
一个旨在使 PHP 中的异步 MySQL 查询更容易的库。 你为什么创造这个? PHP 支持使用 MySQLi 进行异步 MySQL 查询(即套接字上的非阻塞异步 I/O)。 这是一个不错的功能; 但我发现很难管理,不得不轮询所有等待的...
Swoole是一个专门为PHP语言设计的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒...
在REACT-CPP库之上的C ++异步mysql库。 使用lambda和回调返回查询结果。 REACT-CPP-MYSQL是使用REACT-CPP来管理与MySQL的异步连接MySQL库。 关于 REACT-CPP-MYSQL库由Copernica( )创建和维护。 您欣赏我们的工作...
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS...
异步协程框架,SOA服务化调用,支持并行、串行调用、请求合并。支持异步日志,异步文件读写,异步Mysql,异步Redis,Mysql,Redis连接池
本文实例讲述了php异步多线程swoole用法。分享给大家供大家参考。具体分析如下: swoole重新定义PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务,下面的实例就可以证实这一功能。 一般来说,Swoole提供...
PHP100视频教程108:JQuery之各类动画效果的实现 PHP100视频教程109:JQuery 之 Ajax 开发详解 PHP100视频教程110:Jquery案例 之 双下拉框内容移动 PHP100视频教程111:Jquery案例 之 复选框与隔行换色 PHP100...