swoole php 使用教程,Swoole 扩展安装与使用入门
Swoole 扩展安装与使用入门
由 学院君 创建于2年前, 最后更新于 1年前
版本号 #3
37642 views
13 likes
5 collects
Swoole 概述
Swoole 是面向生产环境的 PHP 异步网络通信引擎。使用纯 C 语言编写(Swoole 4 开始逐渐改为通过 C++ 编写),提供了 PHP 语言的异步多线程服务器、异步 TCP/UDP 网络客户端、异步 MySQL、异步 Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写、异步 DNS 查询。除了异步 IO 的支持之外,Swoole 为 PHP 多进程的模式设计了多个并发数据结构和 IPC 通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发 HashTable、Channel、Lock、进程间通信 IPC 等丰富的功能特性。
之前 PHP 一直被诟病的一个原因就是它是同步阻塞式语言,这在 Web 应用这种 IO 密集型的领域对于编写高并发高性能的应用而言,是一个重大阻碍。有了 Swoole 之后,PHP 开发人员可以轻松编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP 以及 WebSocket 服务,从而使得 PHP 语言在异步 IO 和网络通信领域开疆拓土,并且有望在工业级技术方面与 Node.js 和 Go 语言展开角逐。从某种角度上说,Swoole 让 PHP 插上了异步的翅膀,让它飞得更高。
值得一提的是,Swoole 由中国的韩天峰创建并维护,目前已经以独立的开源项目形式进行运作和维护,关于 Swoole 的最新进展可以看下作者韩天峰的这篇文章:Swoole 2019 :化繁为简、破茧成蝶。
关于 Swoole 的官方中文文档可以看这里:https://wiki.swoole.com,本系列教程主要侧重于在 Laravel 框架中集成使用 Swoole 来构建高性能 Laravel 应用。
此外,如果想要更好的掌握 Swoole 的底层原理,需要具备以下知识储备:
多进程/多线程
了解 Linux 操作系统进程和线程的概念
了解 Linux 进程/线程切换调度的基本知识
了解进程间通信的基本知识,如管道、UnixSocket、消息队列、共享内存
SOCKET
了解 SOCKET 的基本操作如 accept/connect、send/recv、close、listen、bind
了解 SOCKET 的接收缓存区、发送缓存区、阻塞/非阻塞、超时等概念
IO复用
了解 select/poll/epoll
了解基于 select/epoll 实现的事件循环,Reactor 模型
了解可读事件、可写事件
TCP/IP网络协议
了解 TCP/IP 协议
了解 TCP、UDP 传输协议
调试工具
使用 gdb 调试 Linux 程序
使用 strace 跟踪进程的系统调用
使用 tcpdump 跟踪网络通信过程
其他 Linux 系统工具,如 ps、lsof、top、vmstat、netstat、sar、ss 等注:关于这部分内容你可以网上搜索相应资源进行了解,也可以通过程序员内功修炼系列进行系统学习。
安装启用
Swoole 是 PHP 的一个扩展,可以通过 PHP 扩展的方式进行安装和启用。
本地安装
Laradock
在本地安装的话,以 Laradock 为例,需要在 laradock 目录下的 .env 中将下面两行配置值设置为 true:
WORKSPACE_INSTALL_SWOOLE=true
PHP_FPM_INSTALL_SWOOLE=true
然后运行 docker-compose build php-fpm workspace 重新构建 Docker 容器,构建完成后重启这两个容器,进入 workspace 容器,运行 php -m 查看 Swoole 是否安装成功,如果扩展列表包含 swoole 则表示安装成功。
Windows/Mac
如果是本地 Windows/Mac 系统上安装的话,直接执行以下命令安装接口:
pecl install swoole
前提是 pecl 命令在系统路径中可用。然后运行 php -m 看到扩展列表包含 swoole 则表明安装成功。
线上安装
如果是在服务器安装的话,以 Ubuntu 系统为例,通过执行下列命令安装即可:
pecl install swoole
然后通过 php -i | grep php.ini 定位 php.ini 文件所在位置,并打开该配置文件,在文件末尾追加如下内容:
[swoole]
extension=swoole.so
保存并退出,在终端运行 php -m,如果看到扩展里包含 swoole,说明安装启用成功。
注:以上服务器安装方式也适用于 Homestead 和其他环境 Ubuntu 系统。
测试 Swoole
下面我们基于 Swoole 编写两个简单的功能来测试 Swoole 是否可以正常工作。
HTTP 服务器
首先我们通过 Swoole 编写一个简单的 HTTP 服务器,在测试目录下创建一个 http_server.php 文件,编写文件代码如下:
// 表明服务器启动后监听本地 9051 端口
$server = new swoole_http_server('127.0.0.1', 9501);
// 服务器启动时返回响应
$server->on("start", function ($server) {
echo "Swoole http server is started at http://127.0.0.1:9501\n";
});
// 向服务器发送请求时返回响应
// 可以获取请求参数,也可以设置响应头和响应内容
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
// 启动 HTTP 服务器
$server->start();
这样,一个最基本的 HTTP 服务器就完成了,其工作原理和工业级的 Apache 和 Nginx 服务器类似,只不过提供的是最简单的服务器监听和响应功能罢了,我们在终端启用这个服务器:
这样,表示服务器已经启动并且在监听请求了,到浏览器中访问 http://127.0.0.1:9501,即可获取服务器输出响应内容:
TCP 服务器和客户端
接下来,我们通过 Swoole 及其协程特性实现一个简单的 TCP 服务器和客户端,TCP 协议需要双方通过三次握手建立连接后才能进行通信,所以是一种可靠的协议,常见的聊天室应用就是基于 TCP 协议传输内容。我们还是在前面的测试目录下创建一个 tcp_server.php 文件用于编写 TCP 服务端代码:
namespace Swoole;
// 监听本地 9503 端口,等待客户端请求
$server = new Server("127.0.0.1", 9503);
// 建立连接时输出
$server->on('connect', function ($serv, $fd){
echo "Client:Connect.\n";
});
// 接收消息时返回内容
$server->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, 'Swoole: '.$data);
$serv->close($fd);
});
// 连接关闭时输出
$server->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});
// 启动 TCP 服务器
$server->start();
然后在该目录下创建一个 tcp_client.php 文件用于编写 TCP 客户端代码:
namespace Swoole;
// Swoole4以后通过协程来实现异步通信
go(function () {
$client = new Coroutine\Client(SWOOLE_SOCK_TCP);
// 尝试与指定 TCP 服务端建立连接(IP和端口号需要与服务端保持一致,超时时间为0.5秒)
if ($client->connect("127.0.0.1", 9503, 0.5)) {
// 建立连接后发送内容
$client->send("hello world\n");
// 打印接收到的消息
echo $client->recv();
// 关闭连接
$client->close();
} else {
echo "connect failed.";
}
});
这样,一个最基本的 TCP 服务端和客户端程序就编写完成了,在终端先启动 TCP 服务端:
php tcp_server.php
然后新开启一个终端窗口,启动 TCP 客户端:
输出从 TCP 服务端接收到消息后 TCP 客户端退出,此时服务端也会打印连接建立和断开的日志消息:
客户端退出后,服务端依然处理监听状态,等待下一个请求。
好了,以上就是今天要给大家介绍的 Swoole 安装及入门教程,后面我们将结合 Laravel 应用实例逐步给大家介绍更多的 Swoole 特性及使用方法,以及如何基于 Swoole 构建高性能的 Laravel 应用。
swoole php 使用教程,Swoole 扩展安装与使用入门相关推荐
- linux boost教程,Linux上安装使用Boost入门指导
获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 解压 2.boost分布 boos ...
- PHP的swoole扩展安装方法详细教程
这篇文章主要为大家分享了PHP的swoole扩展安装方法详细教程,具有实用性和参考价值,感兴趣的小伙伴们可以参考一下 Swoole支持PHP 5.3.10以上版本,所以安装Swoole之前请先安装PH ...
- swoole入门教程01-环境搭建及扩展安装
写在前面的废话 <swoole源码分析>已经写了13章,整个swoole的核心架构基本都分析的差不多了.于是心里一直以来想整理swoole的文档并写一份教程的想法就再度浮了出来.实话说,我 ...
- 编译安装 PHP 扩展 - 含 swoole 扩展安装和升级
编译安装 Redis 扩展 - phpredis 编译安装 Swoole 扩展 编译安装 Pcntl 扩展 编译安装 Sockets 扩展 编译安装 Event 扩展 编译安装 Mongodb 扩展 ...
- swoole扩展安装使用
前几天进行了swoole扩展的安装使用,这里记录一下遇到的坑和总结 我是在虚拟机里面先使用源码安装了一个php7.4的,然后根据swoole官方的安装命令 pecl install swoole . ...
- ffpemg扩展 安装php_ThinkSwoole 教程(二)安装
Swoole 是 PHP 的一个扩展,因此安装 Swoole 本质上就是安装一个 PHP 扩展.Swoole 仅支持 Linux.FreeBSD.MacOS 三种操作系统. 安装准备 安装前必须保证系 ...
- thinkphp6+swoole websocket使用教程自研路线不建议使用
转载请注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路线不建议使用. 介绍 对于think-swoole网上资料五花八门,根据网上资料,我成功走上了岔路口,但是 ...
- php cli swoole mysql_[了解实践]Swoole、PHP与MySQL:连接池,swoole扩展实现真正的PHP数据库连接池。...
背景:swoole的出现,包括PHP出现前,在新浪企业邮箱就有基于Sun Solaris 系统上面用c++写Mysql的长连接,那时候的长连接是基于RPC实现,对mysql那一端形成一个远程过程的调用 ...
- php调试工具xdebug安装配置教程,PHP 7安装调试工具Xdebug扩展的方法教程
PHP 7安装调试工具Xdebug扩展的方法教程 前言 说到PHP代码调试,对于有经验的PHPer,通过echo.print_r.var_dump函数,或PHP开发工具zend studio.edit ...
最新文章
- 互联网大厂有哪些分库分表的思路和技巧?
- 【刷题记录】杂题记录
- 技术上根本不思进取的金山词霸2007
- SAP Spartacus Table cell显示数据类型的Component决定逻辑
- 某大学强制全员申报国自然,不提交就扣奖金!
- python海贼王logo_Python 实现的下载op海贼王网的图片(网络爬虫)
- React中的合成事件
- zookeeper的集群配置
- 传输层协议的UDP和TCP
- 2018 终了,是时候秀出我的 Git 进化日志了!
- DesignPatterns-装饰器模式
- ubuntu14.04 配置jdk环境变量
- CSS-Box模型--理解与整理
- php 日期和时间 (转)
- tomcat启动超时(timeout)解决方法
- eXtremeComponents指南
- LibreOJ - 10066 新的开始
- onenote同步问题
- 74HC138芯片简析
- 一个简单的BitTorrent客户端实现(五):tracker manager和tracker实现
热门文章
- 开发过程问题汇总(不断更新)
- 【论文翻译】Automatic Conversion of Road Networks from OpenDRIVE to Lanelets
- 用计算机打有一群人去喝酒的游戏,适合聚会时玩的40个小游戏
- 什么是Anti-DDoS流量清洗?
- 【年度总结 | 2022】想干什么就去干吧,少年
- Qt Charts示例
- 苹果新款笔记本_微软承诺将在iPhone上提供流媒体游戏服务(全文)_苹果 新款MacBook Pro 13英寸_笔记本新闻...
- html弹出层很字体模糊了,由CSS3 transform 字体模糊问题揭示出浏览器渲染机制
- Java实现 LeetCode 31下一个排列
- MAC合约3.0API