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 扩展安装与使用入门相关推荐

  1. linux boost教程,Linux上安装使用Boost入门指导

    获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 解压 2.boost分布 boos ...

  2. PHP的swoole扩展安装方法详细教程

    这篇文章主要为大家分享了PHP的swoole扩展安装方法详细教程,具有实用性和参考价值,感兴趣的小伙伴们可以参考一下 Swoole支持PHP 5.3.10以上版本,所以安装Swoole之前请先安装PH ...

  3. swoole入门教程01-环境搭建及扩展安装

    写在前面的废话 <swoole源码分析>已经写了13章,整个swoole的核心架构基本都分析的差不多了.于是心里一直以来想整理swoole的文档并写一份教程的想法就再度浮了出来.实话说,我 ...

  4. 编译安装 PHP 扩展 - 含 swoole 扩展安装和升级

    编译安装 Redis 扩展 - phpredis 编译安装 Swoole 扩展 编译安装 Pcntl 扩展 编译安装 Sockets 扩展 编译安装 Event 扩展 编译安装 Mongodb 扩展 ...

  5. swoole扩展安装使用

    前几天进行了swoole扩展的安装使用,这里记录一下遇到的坑和总结 我是在虚拟机里面先使用源码安装了一个php7.4的,然后根据swoole官方的安装命令 pecl install swoole  . ...

  6. ffpemg扩展 安装php_ThinkSwoole 教程(二)安装

    Swoole 是 PHP 的一个扩展,因此安装 Swoole 本质上就是安装一个 PHP 扩展.Swoole 仅支持 Linux.FreeBSD.MacOS 三种操作系统. 安装准备 安装前必须保证系 ...

  7. thinkphp6+swoole websocket使用教程自研路线不建议使用

    转载请注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路线不建议使用. 介绍 对于think-swoole网上资料五花八门,根据网上资料,我成功走上了岔路口,但是 ...

  8. php cli swoole mysql_[了解实践]Swoole、PHP与MySQL:连接池,swoole扩展实现真正的PHP数据库连接池。...

    背景:swoole的出现,包括PHP出现前,在新浪企业邮箱就有基于Sun Solaris 系统上面用c++写Mysql的长连接,那时候的长连接是基于RPC实现,对mysql那一端形成一个远程过程的调用 ...

  9. php调试工具xdebug安装配置教程,PHP 7安装调试工具Xdebug扩展的方法教程

    PHP 7安装调试工具Xdebug扩展的方法教程 前言 说到PHP代码调试,对于有经验的PHPer,通过echo.print_r.var_dump函数,或PHP开发工具zend studio.edit ...

最新文章

  1. 互联网大厂有哪些分库分表的思路和技巧?
  2. 【刷题记录】杂题记录
  3. 技术上根本不思进取的金山词霸2007
  4. SAP Spartacus Table cell显示数据类型的Component决定逻辑
  5. 某大学强制全员申报国自然,不提交就扣奖金!
  6. python海贼王logo_Python 实现的下载op海贼王网的图片(网络爬虫)
  7. React中的合成事件
  8. zookeeper的集群配置
  9. 传输层协议的UDP和TCP
  10. 2018 终了,是时候秀出我的 Git 进化日志了!
  11. DesignPatterns-装饰器模式
  12. ubuntu14.04 配置jdk环境变量
  13. CSS-Box模型--理解与整理
  14. php 日期和时间 (转)
  15. tomcat启动超时(timeout)解决方法
  16. eXtremeComponents指南
  17. LibreOJ - 10066 新的开始
  18. onenote同步问题
  19. 74HC138芯片简析
  20. 一个简单的BitTorrent客户端实现(五):tracker manager和tracker实现

热门文章

  1. 开发过程问题汇总(不断更新)
  2. 【论文翻译】Automatic Conversion of Road Networks from OpenDRIVE to Lanelets
  3. 用计算机打有一群人去喝酒的游戏,适合聚会时玩的40个小游戏
  4. 什么是Anti-DDoS流量清洗?
  5. 【年度总结 | 2022】想干什么就去干吧,少年
  6. Qt Charts示例
  7. 苹果新款笔记本_微软承诺将在iPhone上提供流媒体游戏服务(全文)_苹果 新款MacBook Pro 13英寸_笔记本新闻...
  8. html弹出层很字体模糊了,由CSS3 transform 字体模糊问题揭示出浏览器渲染机制
  9. Java实现 LeetCode 31下一个排列
  10. MAC合约3.0API