广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php中swoole的作用有哪些
  • 931
分享到

php中swoole的作用有哪些

2023-06-15 07:06:34 931人浏览 独家记忆
摘要

这篇文章主要介绍了PHP中swoole的作用有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php 中的 node ?Swoole 到底是什么?我先从官方文档中引用下 S

这篇文章主要介绍了PHP中swoole的作用有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

php 中的 node ?Swoole 到底是什么?

我先从官方文档中引用下 Swoole 的定义:

Swoole:面向生产环境的 PHP 异步网络通信引擎。
使 PHP 开发人员可以编写高性能、可拓展的异步并发 tcp、UDP、Unix SocketHttpwebsocket 服务,而无需深入了解非阻塞 I/O 编程和初级 linux 内核。

Swoole 使用 C 语言编写,作为 PHP 的基本扩展存在。听起来可还行,是吧?用 PHP 来运行 HTTP 服务?用 PHP 实现 WEBsockets ?还有其他的可能性,是不是很风骚?而且所有的这些都会保持极高的性能,我们来看看吧!

如何让它运行?

不同平台的安装方法有差异。

对于 Linux 来说,只需要运行一条 PECL 命令:

pecl install swoole

MacOS 用户可以使用 brew 命令:

brew install swoole
brew install homebrew/php/php72-swoole

译者注:截止翻译时,Brew 官方已经移除了所有 PHP 扩展,请使用 PECL 安装。

暂时不支持在 windows 上的安装,但是可以使用 Docker 的方式。

使用 Docker 运行 Swoole

毫无疑问,运行 PHP + Swoole 的最佳方案便是 Docker。让我们来看看如何创建一个包含 Swoole 的容器。首先,我们需要创建一个 Dockerfile。

FROM php:latest\
RUN pecl install swoole\
ADD php.ini /usr/local/etc/php\
RUN usermod -u 1000 www-data

这看起来十分直接。基于 PHP 官方 Docker 镜像,使用 PECL 安装 Swoole,接着复制 php.ini 到镜像内 —— 搞定。最后一行是 MacOS 的 Docker 一个常规的权限修复命令。

至于被复制的 php.ini 配置文件,它只需一行:

extension=swoole.so

Swoole 可以做什么?

Swoole 有许多功能,大部分是异步执行。以下是其中最让人感兴趣的部分(其他的可以在 Swoole官方文档中找到):

  • TCP/UDP 服务端与客户端,

  • HTTP 服务端与客户端,

  • Websocket 服务端与客户端,

  • 基于 Redis 协议的服务端与客户端,

  • MySQL 客户端,

  • 原子性,

  • 文件系统。

我们来看下其中的 HTTP 服务、Websocket 服务、文件系统怎么使用。在我看来这是最重要的几个功能。

基于 Swoole 实现 HTTP 服务

基于 Swoole 仅需少量代码即可实现一个简易的异步 HTTP 服务。以下是一份示例代码,该例子使用异步文件系统来读取index.html文件并作为响应返回给它处理的每条请求。

<?phpchdir(__DIR__);$http = new swoole_http_server('php', 8080);$http->on('start', function ($server) {    echo "Server has been started!\n";});$http->on('request', function ($request, $response) {    swoole_async_readfile('index.html', function($filename, $content) use ($response) {        $response->header('Content-Type', 'text/html');        $response->end($content);    });});$http->start();

如你所见,这段代码看起来有点像 node.js 的风格。

首先,我们创建一个类似 HTTP 服务的swoole_http_server对象。接着,绑定两个异步回调函数到以下事件:一个用于启动,将会在服务启动时被调用;另一个用于请求,将会在收到每次请求时被调用,它带有$request和$response两个参数。

$request对象包含了所有与请求相关的数据:请求路径(Path)、头信息(Headers)等等。而$response被用来提供输出、设置响应头等。值得一提的是,以上两个对象都不符合 PSR 标准,而是 Swoole 自定义的。
在请求事件中,异步请求文件系统用于从文件加载数据。 一旦数据可用,就会在数据加载完成后触发回调。然后将此数据加载到响应体并关闭比此次响应。 这将会把数据有效地发送回浏览器。

这样看起来很简洁,最重要的是 --- 能运行起来。 来看下它的性能如何呢?

HTTP Server 标准

为了使用 Swoole 测试 HTTP 服务器的性能,我在 Node 中创建了一个应用程序 --- 它可以与 Swoole 中的应用程序完全相同 - 还有一个 服务器,它将提供 index.html 作为静态文件。 全部运行在 3 个独立的容器中。

然后,我用 wrk 工具给这些容器进行压力测试。 结果令人震惊。

php中swoole的作用有哪些

Swoole 的工作性能要比预期的好很多!

这令人惊讶。 我没想到 Swoole 会超越 Nginx ,但它确实做到了!这也远远超过了 Node 。 这个扩展的原始功能确实令人印象深刻,但它在请求中完成了更多工作后逐渐消失。 不幸的是, Swoole 有两个小缺点,使这些缺点和原始标准有些偏差。 我们稍后会找到他们。

在 Websocket 服务中使用 Swoole

如前所述, Swoole 提供了一种创建 websocket 服务器的方法。 它以异步方式来进行工作,遵循与 HTTP 协议并和 Swoole 部分方法功能相同。 在我看来,它是最重要的 Swoole 组件之一。 来吧,在 PHP 运行中的 websockets 会是怎么样。让我们看看它的结果。

<?php$server = new swoole_websocket_server('php', 9501);$server->on('start', function (swoole_websocket_server $server) {    echo "Server has been started!\n";});$server->on('open', function (swoole_websocket_server $server, $request) {    echo "websocket: new connection, id: {$request->fd}\n";});$server->on('message', function (swoole_websocket_server $server, $frame) {    echo "websocket: {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";    $server->push($frame->fd, "Replying, you sent " . $frame->data);});$server->on('close', function (swoole_websocket_server $server, $fd) {    echo "websocket: connection with id {$fd} has been closed\n";});$server->start();

看起来类似于 HTTP 服务器的示例。

首先,我们创建类似于 websocket 服务器的 swoole_websocket_server 对象。 然后,我们将 4 个匿名函数绑定到 4 个事件。 第一个启动事件,它将像 HTTP 服务器的启动事件一样工作。 第二个运行事件,它会在连接另一个 websocket 后执行。 第三个消息事件将在 websocket 向服务器发送消息时执行。最后 --- 关闭时间会在 websocket 断开连接时执行。

ID 是作为 Websocket 连接到服务器的唯一标识,该 ID 随每个新的 websockets 进行递增。

使用 Swoole 时遇到的问题

到目前为止,这一切都运行良好,但在使用 Swoole 测试某些解决方案时遇到了两个问题。 我将它列出来:

  • HTTP 服务器中没有真正的支持 https

  • 脚本中不支持全局变量。

第一问题个很容易解决。 我们只需要使用 Nginx 或任何负载均衡设备设置反向代理,就完成了。 但通过这样做,我们就失去了 Swoole 提供的极端性能。

第二个问题更棘手。 Swoole 生成用于处理 HTTP 请求的工作进程,这意味着如果我们创建一个全局变量,它的值在线程之间是独立的,并且它不能工作。下面这段代码是显示问题所在之处。

<?php$server = new swoole_websocket_server('php', 9501);$server->on('start', function (swoole_websocket_server $server) {    echo "Server has been started!\n";});$server->on('open', function (swoole_websocket_server $server, $request) {    echo "websocket: new connection, id: {$request->fd}\n";});$server->on('message', function (swoole_websocket_server $server, $frame) {    echo "websocket: {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";    $server->push($frame->fd, "Replying, you sent " . $frame->data);});$server->on('close', function (swoole_websocket_server $server, $fd) {    echo "websocket: connection with id {$fd} has been closed\n";});$server->start();

预期中响应的信息将返回 0 ,然后返回 1, 2 , 3 等等,但它总是返回 0 。

我找到了 Swoole 的作者来检查它是否是一个 bug ,但事实并非如此。 为了获得我们期望的行为,我们可以在配置中设置 worker_num = 1 ,但这会降低部分性能。

感谢你能够认真阅读完这篇文章,希望小编分享的“php中swoole的作用有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网PHP编程频道,更多相关知识等着你来学习!

--结束END--

本文标题: php中swoole的作用有哪些

本文链接: https://www.lsjlt.com/news/278529.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php中swoole的作用有哪些
    这篇文章主要介绍了php中swoole的作用有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP 中的 Node ?Swoole 到底是什么?我先从官方文档中引用下 S...
    99+
    2023-06-15
  • PHP的swoole框架有哪些
    PHP中的swoole框架有Swoft、easySwoole、MixPHP、SwoolefySwoftSwoft是一款基于Swoole扩展实现的PHP微服务协程框架,使用Swoft可以通过内置协程网络服务器及常用的协程客户端且常驻内存,而不...
    99+
    2022-10-17
  • php的fpm和swoole有哪些区别
    本文小编为大家详细介绍“php的fpm和swoole有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“php的fpm和swoole有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别:1、“PHP...
    99+
    2023-06-29
  • swoole支持的PHP版本有哪些
    这篇文章主要讲解了“swoole支持的PHP版本有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“swoole支持的PHP版本有哪些”吧!一、Swoole支持的PHP版本PHP 7.0 -...
    99+
    2023-07-05
  • php框架swoole有哪些特点
    PHP框架Swoole的特点包括: 高性能:Swoole是一个为PHP开发者提供的高性能网络通信框架,与传统的PHP-FPM相比...
    99+
    2023-10-27
    php swoole
  • 最新的PHP+Swoole/Go的面试题有哪些
    今天小编给大家分享一下最新的PHP+Swoole/Go的面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Swo...
    99+
    2023-07-05
  • Swoole扩展的模式有哪些
    本篇文章为大家展示了Swoole扩展的模式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一 Worker同步阻塞这个模式的使用方法:swoole_server设置为SWOOLE_PROCES...
    99+
    2023-06-06
  • easyswoole和swoole的区别有哪些
    这篇“easyswoole和swoole的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“easyswoole和sw...
    99+
    2023-07-05
  • php中ThinkPHP的作用有哪些
    本篇文章给大家分享的是有关php中ThinkPHP的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言...
    99+
    2023-06-14
  • php的作用有哪些
    这篇文章主要讲解了“php的作用有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php的作用有哪些”吧!php即“超文本预处理器”,是在服务器端执行的脚本语言,用于web开发;php的作...
    99+
    2023-07-05
  • nodejs与swoole的不同点有哪些
    这篇“nodejs与swoole的不同点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs与swoole的不同...
    99+
    2023-06-29
  • php中pcntl_fork有哪些作用
    小编给大家分享一下php中pcntl_fork有哪些作用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!pcntl_fork()函数是php-pcntl模块中用于创...
    99+
    2023-06-15
  • 安装PHP有哪些作用
    这篇文章主要介绍了安装PHP有哪些作用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇安装PHP有哪些作用文章都会有所收获,下面我们一起来看看吧。安装PHP的作用:1、编写服务端脚本,这是php主要的目标领域,可...
    99+
    2023-07-04
  • php抽象类的作用有哪些
    PHP抽象类的作用包括:1. 定义通用的属性和方法:抽象类可以定义一些通用的属性和方法,供其子类继承和实现。这样可以避免在多个类中重...
    99+
    2023-08-09
    php
  • Git API在PHP开发中的作用有哪些?
    Git是一款非常流行的分布式版本控制系统,它可以跟踪文件的更改并记录这些更改,同时还可以支持多人协同开发。在PHP开发中,我们可以使用Git API来实现代码管理和版本控制。本文将介绍Git API在PHP开发中的作用,并且提供一些相关的...
    99+
    2023-08-14
    开发技术 git api
  • PHP中常见的数组操作有哪些?
    PHP是一种广泛使用的服务器端编程语言,也是互联网应用开发中非常重要的一部分。在PHP中,数组是一种非常常见的数据类型,它可以用于存储和操作一组相关的数据。在本文中,我们将介绍PHP中常见的数组操作,希望对PHP开发者有所帮助。创建数组在P...
    99+
    2023-05-22
    PHP数组操作 常见数组操作 PHP数组方法
  • javascript中有哪些作用
    这篇文章主要介绍了javascript中有哪些作用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏...
    99+
    2023-06-15
  • Java中CountDownLatch的作用有哪些
    本篇文章给大家分享的是有关Java中CountDownLatch的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实践代码package com.github...
    99+
    2023-06-06
  • python中compile的作用有哪些
    在Python中,compile函数的作用有以下几种:1. 将字符串形式的源代码编译为可执行代码。编译后的代码可以使用exec函数执...
    99+
    2023-09-26
    python compile
  • java中public的作用有哪些
    在Java中,public关键字有以下几个作用:1. 公共访问权限:public关键字修饰的类、方法、变量可以被任何其他类访问,无论...
    99+
    2023-09-16
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作