PHP的异步、并行、高性能网络通讯引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库链接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客户端。php
Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调便可,无需关心底层。与
Nginx
/Tornado
/Node.js
等全异步的框架不一样,Swoole既支持全异步,也支持同步。html除了异步IO的支持以外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通讯机制,能够大大简化多进程并发编程的工做。其中包括了并发原子计数器,并发HashTable,Channel,Lock,进程间通讯IPC等丰富的功能特性。mysql
Swoole从2.0版本开始支持了内置协程,可使用彻底同步的代码实现异步程序。PHP代码无需额外增长任何关键词,底层自动进行协程调度,实现异步。git
在已经安装的php环境下面须要安装一下 Swoole 扩展,在文档中说明了各类系统的,我这里记录一下本身这边的操做,mac下用的brew 包管理:程序员
而后看看个人 php 版本,选择安装不一样的拓展,这边安装 brew install homebrew/php/php71-swoole,但我这里已经安装好了,若是失败,也经过源码安装brew reinstall php71-swoole --build-from-sourcegithub
而后须要php.ini 中添加 extension = swoole.so,使用 php -m 看拓展有没有生效,若是没生效能够试试重启 apache 服务器。redis
下面写个demo 试试:sql
$serv = new swoole_server("127.0.0.1", 9501); $serv->on('connect', function ($serv, $fd){ echo "Client:Connect.\n"; }); $serv->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, 'Swoole: '.$data); $serv->close($fd); }); $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); $serv->start();
客户端:数据库
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); $client->on("connect", function($cli) { $cli->send("hello world\n"); }); $client->on("receive", function($cli, $data = ""){ echo "Receive: ".$data.PHP_EOL; }); $client->on("error", function($cli){ echo "connect fail\n"; }); $client->on("close", function($cli){ echo "connection close\n"; }); $client->connect('127.0.0.1', 9501, 0.5);
而后须要在php-cli环境下执行:apache
文档里面有一张图,能够帮助咱们理解