PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器异步TCP/UDP网络客户端异步MySQL异步Redis数据库连接池AsyncTask消息队列毫秒定时器异步文件读写异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端Http2.0服务器端/客户端

Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。

除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器并发HashTableChannelLock进程间通信IPC等丰富的功能特性。

Swoole从2.0版本开始支持了内置协程,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。

在已经安装的php环境下面需要安装一下 Swoole 扩展,在文档中说明了各种系统的,我这里记录一下自己这边的操作,mac下用的brew 包管理:

然后看看我的 php 版本,选择安装不同的拓展,这边安装 brew install homebrew/php/php71-swoole,但我这里已经安装好了,如果失败,也通过源码安装brew reinstall php71-swoole --build-from-source

然后需要php.ini 中添加 extension = swoole.so,使用 php -m 看拓展有没有生效,如果没生效可以试试重启 apache 服务器。

下面写个demo 试试:

$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环境下执行:

文档里面有一张图,可以帮助我们理解

最新文章

  1. PHP中的全局变量global和$GLOBALS的区别
  2. BZOJ 1857 传送带 (三分套三分)
  3. NOIP2016普及组
  4. linux下memcached的安装
  5. Python基础学习笔记FromImooc.com
  6. redis的主从复制部署和使用
  7. (一)MII/MDIO接口详解
  8. django 2
  9. Ant之build.xml
  10. ios开发常见问题及解决办法
  11. C/C++默认浮点型
  12. 在docker以FPM-PHP运行php,慢日志导致的BUG分析
  13. C#图解教程 第八章 表达式和运算符
  14. 第3章 结束会话端点(EndSession Point) - IdentityModel 中文文档(v1.0.0)
  15. HTTPserver v3.0 版本项目
  16. 比较python类的两个instance(对象) 是否相等
  17. C语言----管道
  18. python矩阵水平镜像
  19. [HDU3436]Queue-jumpers
  20. vue / js使用video获取视频时长

热门文章

  1. go语言面向对象之方法
  2. ASP.NET中的身份验证
  3. 案例:使用dbms_xplan.display_cursor无法获取执行计划
  4. Python进阶二
  5. [browser location和history] 简单实现了个路由[转载]
  6. Unitest自动化测试基于HTMLTestRunner报告案例
  7. socket调试工具(Mac版)
  8. PC/SC双界面读写器开发指南
  9. Django 资源 与 知识 Django中自建脚本并使用Django环境 model中的save()方法说明 filter()用法
  10. CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC