在Laravel5.6中使用Swoole的协程数据库查询
什么是Swoole
直接套用Swoole官网的介绍:PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
Swoole官网的文档不够丰富啊,这比较头疼,但大部分的问题都解释了。如果你对Swoole很感兴趣,那么看看这个Swoole入门教程。Swoole提供了多线程、长连接等很多牛逼的功能,把php上升到了一个新的台阶,具体的你可以看看入门教程,本文只限于讨论Laravel和Swoole的结合。
Swoole为了提供服务,必须以CLI模式运行,什么是CLI模式呢?如果你Swoole业务代码是写在一个叫server.php的文件中,那么在命令行下输入php server.php开启。这是比较头疼的事情,因为Laravel框架可不是这样的运转的,那如何能与Laravel结合呢?没错,自定义一条Artisan Command,就这么简单。
强烈推荐在你的laravel项目中,使用 laravel-s
这个包.
composer require "hhxsv5/laravel-s:~1.0" -vvv
然后,依赖 kuaiapp/db
这个包,作用是实现 Swoole\Coroutine\MySQL
的伪 PDO 接口
composer require "kuaiapp/db" -vvv
给 vendor/laravel/framework
打patch
cd .//vendor/laravel/framework wget https://gist.githubusercontent.com/xiaohuilam/81ae50c1bc06180bd8e6fcbdaadba86a/raw/529cb96ca9abeed7a35076725b3b5cd8a1e04ff7/git.patch git am < git.patch
启动laravel-s
php artisan laravels start
现在你就可以测试你的数据库查询了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
关于Curl在Swoole协程中的解决方案详析
前言 众所周知,在 Swoole 应用中,是不推荐使用 Curl 的,因为 Curl 会阻塞进程. 本文会用实际的代码和数据,用最直观的方式,让你明白为什么. 最后还会给出 Curl 在 Swoole 中的解决方案,如果不想看分析可以直接拉到最后. 例程对比 宇润看文章不喜欢那些虚的,所以自己写也比较实在,直接来跑一下代码,用数据看为什么不推荐在 Swoole 使用 Curl. 为了偷懒,我直接用了 YurunHttp的 Curl 和 Swoole Handler,来替代那些又臭又长的 Curl
-
Swoole4.4协程抢占式调度器详解
前言 Swoole内核团队开设的专栏,会逐渐投入精力写文章介绍Swoole的开发历程,实现原理,应用实践等,大家可以更好的交流,共同学习,建设PHP生态. 协程调度 去年Swoole推出了4.0版本后,完整的支持PHP协程,我们可以基于协程实现CSP编程,身边的开发者惊呼,原来PHP代码还可以这样写.Swoole的协程默认是基于IO调度,程序中有阻塞会自动让出当前协程,协程的各种优势我们不在这里展开讨论.如果是IO密集型的场景,可以表现得很不错.但是对于CPU密集型的场景,会导致一些协程因为得不
-
在Laravel5.6中使用Swoole的协程数据库查询
什么是Swoole 直接套用Swoole官网的介绍:PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询. Swoole内置了Http/WebSocket服务器端/客户端.Http2.0服务器端. Swoole官网的文档不够丰富啊,这比较头疼,但大部分的问题都解释了.如果你对Swoole很感兴趣,那么看看这个S
-
python 中的 asyncio 异步协程
目录 一.定义协程 二.运行协程 三.协程回调 四.运行多个协程 五.run_forever 六.多协程中关闭run_forever 一.定义协程 asyncio 执行的任务,称为协程,但是Asyncio 并不能带来真正的并行 Python 的多线程因为 GIL(全局解释器锁)的存在,也不能带来真正的并行 import asyncio # 通过 async 定义一个协程 async def task(): print('这是一个协程') # 判断是否是一个协程,返回True print(asyn
-
python3爬虫中异步协程的用法
1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后导致其爬取效率是非常非常低的. 为了解决这类问题,本文就来探讨一下 Python 中异步协程来加速的方法,此种方法对于 IO 密集型任务非常有效.如将其应用到网络爬虫中,爬取效率甚至可以成百倍地提升. 注:本文协程使用 async/await 来实现,需要 Python 3.5 及以上版本. 2.
-
C++20中的协程(Coroutine)的实现
C++20中的协程(Coroutine) 从2017年开始, 协程(Coroutine)的概念就开始被建议加入C++20的标准中了,并已经开始有人对C++20协程的提案进行了介绍.1事实上,协程的概念在很早就出现了,甚至其他语言(JS,Python,C#等)早就已经支持了协程. 可见,协程并不是C++所特有的概念. 那么,什么是协程? 简单来说,协程就是一种特殊的函数,它可以在函数执行到某个地方的时候暂停执行,返回给调用者或恢复者(可以有一个返回值),并允许随后从暂停的地方恢复继续执行.注意,这
-
Python协程的用法和例子详解
从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数.可是,在协程中, yield 通常出现在表达式的右边(例如, datum = yield),可以产出值,也可以不产出 -- 如果 yield 关键字后面没有表达式,那么生成器产出 None. 协程可能会从调用方接收数据,不过调用方把数据提供给协程使用的是 .send(datum) 方法,而不是next(-) 函数. ==yield 关键字甚至还可以不接收或传出数据.不管数据如何流动, yield 都是一种流程控制工具,使用
-
详细解读tornado协程(coroutine)原理
tornado中的协程是如何工作的 协程定义 Coroutines are computer program components that generalize subroutines for nonpreemptive multitasking, by allowing multiple entry points for suspending and resuming execution at certain locations.. -- [ 维基百科 ] 我们在平常编程中,更习惯使用的是子
-
python 单线程和异步协程工作方式解析
在python3.4之后新增了asyncio模块,可以帮我们检测IO(只能是网络IO[HTTP连接就是网络IO操作]),实现应用程序级别的切换(异步IO).注意:asyncio只能发tcp级别的请求,不能发http协议. 异步IO:所谓「异步 IO」,就是你发起一个 网络IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. 实现方式:单线程+协程实现异步IO操作. 异步协程用法 接下来让我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概
-
详解Python 协程的详细用法使用和例子
从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数.可是,在协程中, yield 通常出现在表达式的右边(例如, datum = yield),可以产出值,也可以不产出 -- 如果 yield 关键字后面没有表达式,那么生成器产出 None. 协程可能会从调用方接收数据,不过调用方把数据提供给协程使用的是 .send(datum) 方法,而不是next(-) 函数. ==yield 关键字甚至还可以不接收或传出数据.不管数据如何流动, yield 都是一种流程控制工具,使用
-
详解c++20协程如何使用
什么是协程 新接触的人看了网上很多人的见解都是一头雾水,本人的理解,协程就是可中断的函数,这个函数在执行到某一时刻可以暂停,保存当前的上下文(比如当前作用域的变量,函数参数等等),在后来某一时刻可以手动恢复这个中断的函数,把保存的上下文恢复并从中断的地方继续执行.简而言之,协程就是可中断的函数,协程如何实现:保存上下文和恢复上下文. 你可能会说协程不会这么简单的吧,我这里来举例一下啊,如python的协程 def test(): print('begin') yield print('hello
随机推荐
- php连接不上mysql但mysql命令行操作正常的解决方法
- iOS开发系列--详细介绍数据存取
- python ip正则式
- js跨域请求数据的3种常用的方法
- JS实现物体带缓冲的间歇运动效果示例
- Python优先队列实现方法示例
- javascript使用btoa和atob来进行Base64转码和解码
- Android开发中数据库升级且表添加新列的方法
- iOS中实现动态区域裁剪图片功能实例
- iOS tableView实现搜索功能
- windows 10下mysql 5.7.21 winx64安装配置方法图文教程
- React和Vue中监听变量变化的方法
- 使用IntelliJ IDEA搭建SSM框架的图文教程
- Java实现的计算稀疏矩阵余弦相似度示例
- Python django框架应用中实现获取访问者ip地址示例
- Python Django基础二之URL路由系统
- springboot自定义Starter过程解析
- 详解Java8新特性Stream之list转map及问题解决
- linux下安装golang的方法
- Laravel 简单实现Ajax滚动加载示例