返回顶部
首页 > 资讯 > 精选 >Swoole扩展的模式有哪些
  • 332
分享到

Swoole扩展的模式有哪些

2023-06-06 19:06:07 332人浏览 安东尼
摘要

本篇文章为大家展示了Swoole扩展的模式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一 Worker同步阻塞这个模式的使用方法:swoole_server设置为SWOOLE_PROCES

本篇文章为大家展示了Swoole扩展的模式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

第一 Worker同步阻塞

这个模式的使用方法:

  • swoole_server设置为SWOOLE_PROCESS

  • 只使用Worker进程

  • 根据不同的情况设置worker_num的数值

  • 设置dispatch_mode参数为1或3

  • Worker进程内使用同步阻塞的代码编写方式,这里不使用任何异步io接口

这个模式的瓶颈就在与onRequestonReceive里代码逻辑的处理速度。按照快慢可以分为几种

  1. 外网CURL调用。这个最慢,快的数百毫秒,慢的情况可能需要几十秒

  2. 内网rpcHttp接口,这个取决与这个接口的速度

  3. MySQL复杂查询,一条sql如果没有索引可能需要几百毫秒,甚至几秒或更长时间。而如果是主键查询或者索引足够有效可能只需要几毫秒

  4. Redis/Memcache,内存数据库局域网而且是长连接,调用一次可能只需要几百微秒也就是0.x毫秒就能返回

  5. 读取磁盘文件,普通机械磁盘未命中PageCache引起磁盘寻道,可能需要几十毫秒。SSD磁盘速度就快多了几毫秒即可完成随机读取。

  6. 内存文件系统或共享内存,读取/tmp或/dev/shm下的共享文件本质上是读取共享内存,仅需几微妙到几十微秒即可完成。如果是直接读共享内存可能更快,纳秒级别。

进程数量

根据上面的IO耗时,设置适当的进程数量即可。

  • IO很慢就设置几百个Worker进程,如操作Mysql、CURL、大量读写磁盘

  • IO很快就可设置少量进程,如操作Redis、内存文件系统、共享内存

投递模式

如果请求是无状态的可以使用dispatch_mode=1或3,轮循投递或者区分忙闲投递。

长连接应用

比如聊天室,网络游戏。连接之间需要交互的应用。 可以使用 mysql/Redis/文件 存储用户的连接fd,分组信息。要向某个用户发数据可以根据UID查出对应的fd,发送数据即可。发送分组,可以根据分阻ID查询出fd列表,循环发送数据即可。

第二 Worker非阻塞+Task

这种模式是典型的同步+异步,复杂的业务逻辑使用同步阻塞在Task进程中处理,简单要求高并发的逻辑使用异步非阻塞在Worker进程中处理。

使用方法

  • 使用SWOOLE_PROCESS模式

  • dispatch_mode 设置为2(默认就是2,可不做任何设置)

  • worker_num 设置为CPU核数

  • task_worker_num 根据业务逻辑的耗时情况进行设置,如果平均耗时较长,需要设置数百个进程,耗时较短可设置几十个进程

Worker进程

在这个模式中,Worker进程不能有任何同步阻塞的操作,只处理请求响应或数据接收发送,仅进行PHP数组或对象操作或其他计算逻辑。具体参考 模式3 Worker进程全异步。

Task进程

无状态地处理任务,并返回结果。需要注意单个Task的执行时间,避免处理时间太长导致Task排队过多。

第三 Worker全异步

这个模式就是真正的异步非阻塞编程,在代码中只能使用Swoole提供的异步非阻塞IO操作,不得执行任何普通的php阻塞IO函数,如curl、mysql、redis、fsockopen、stream、Socket、proc_open等。

与模式二 不同的是全异步服务器不使用Task进程,即使是很复杂的业务逻辑也在Worker进程中执行。纯异步编程需要对开发者要求较高。

使用方法

  • dispatch_mode设置为2

  • worker_num 设置为CPU核数

逻辑实现

Worker进程内的PHP代码只能进行下列3种操作:

  • 使用swoole_redis、swoole_mysql、swoole_http_client、swoole_client+async操作

  • 进行PHP数组、对象操作或其他内存计算逻辑

  • 使用swoole_server的send、push、close、response->end等操作

适用场景

  • 长连接服务

  • 并发能力和吞吐量有较高要求

  • 团队开发者技术水平较高

弊端和解决方案

  • 纯异步需要使用嵌套回调的方式编写代码,与传统的编程模式完全不同,异步是事件驱动式的,代码不是顺序执行的。

  • 异步嵌套回调的方式在程序逻辑复杂后会变得难以维护

可使用 Promise 或 Yield/Generator 简化异步编程。

第四 Base模式+同步阻塞

Base模式是一个简化版本,Base模式下Swoole的运行原理与node.js完全一致,是单线程的。对tcp客户端的Accept、Send、Recv、Close都是同一个进程内操作的。

与Process同步阻塞模式不同的是BASE模式下Worker进程的调度由操作系统实现。因此可以实现一个Leader-Follower模式的服务器程序。

使用方法

  • 使用SWOOLE_BASE模式

  • worker_num根据逻辑代码的耗时情况设置几百或几十

  • worker进程内使用同步阻塞IO操作

适用场景

  • 适合短连接 & 请求响应式 服务,如WEB服务、RPC服务

  • 这种模式不能实现单连接并发,客户端的连接被某个Worker进程Accept之后,只能在此进程内处理请求

第五 Process

Process提供了对进程管理的封装。基于Process可实现:

多进程+进程间通信编程

将其他语言编写的程序包装为子进程,重定向标准输入输出到管道,与该程序进行通信。可实现任意编程语言为我PHP所用。

上述内容就是Swoole扩展的模式有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: Swoole扩展的模式有哪些

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

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

猜你喜欢
  • Swoole扩展的模式有哪些
    本篇文章为大家展示了Swoole扩展的模式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一 Worker同步阻塞这个模式的使用方法:swoole_server设置为SWOOLE_PROCES...
    99+
    2023-06-06
  • python扩展模块有哪些
    python中常用的扩展模块有以下几种os模块os模块提供了多数操作系统的功能接口函数,当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作。sys模块sys是一个提供了一系列有关python运行环境变量和函数的...
    99+
    2024-04-02
  • JS常见的API扩展形式有哪些
    本文小编为大家详细介绍“JS常见的API扩展形式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS常见的API扩展形式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • Visual Studio的扩展有哪些
    这篇文章主要介绍“Visual Studio的扩展有哪些”,在日常操作中,相信很多人在Visual Studio的扩展有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Visual Studio的扩展有哪些...
    99+
    2023-06-17
  • word扩展名有哪些
    本篇内容主要讲解“word扩展名有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“word扩展名有哪些”吧!word扩展名:word文件的扩展名是“dox或docx”。如果你要查看看就可以选择...
    99+
    2023-07-01
  • SCSS的扩展功能有哪些
    本文小编为大家详细介绍“SCSS的扩展功能有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“SCSS的扩展功能有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 1.嵌套...
    99+
    2024-04-02
  • es6新增的扩展有哪些
    这篇“es6新增的扩展有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6新增的扩展...
    99+
    2024-04-02
  • 关于VSCode扩展有哪些
    本篇内容介绍了“关于VSCode扩展有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. Color ...
    99+
    2024-04-02
  • byte常用扩展有哪些
    这篇文章给大家分享的是有关byte常用扩展有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。byte常用扩展应用一:转换为十六进制字符串 public static string&...
    99+
    2023-06-17
  • Linq扩展函数有哪些
    这篇文章主要为大家展示了“Linq扩展函数有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linq扩展函数有哪些”这篇文章吧。首先介绍Linq扩展函数(泛型函数)的方式提供的函数:◆用不同方...
    99+
    2023-06-17
  • Spring有哪些扩展接口
    这篇文章给大家介绍Spring有哪些扩展接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、BeanPostProcessorBeanPostProcessor 接口是 Spring 提供的众多接口之一,他的作用主要...
    99+
    2023-06-15
  • php常用扩展有哪些
    这篇文章主要介绍了php常用扩展有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php扩展主要分为两类:php模块扩展和zend模块扩展。下面就由小编来为大家介绍一下ph...
    99+
    2023-06-20
  • laravel常用扩展有哪些
    一些常用的 Laravel 扩展包包括:1. Laravel Debugbar:用于在开发过程中显示调试信息和性能分析的工具栏。2....
    99+
    2023-09-29
    laravel
  • 常见的Gnome Shell扩展有哪些
    这篇文章主要介绍了常见的Gnome Shell扩展有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇常见的Gnome Shell扩展有哪些文章都会有所收获,下面我们一起来看看吧。Gnome Shell 是 G...
    99+
    2023-06-27
  • Nagios的插件和扩展有哪些
    Nagios的插件和扩展丰富多样,可以根据监控需求选择合适的插件和扩展。一些常用的Nagios插件和扩展包括: NRPE(Nag...
    99+
    2024-04-02
  • html文件的扩展名有哪些
    html 文件的扩展名共有 4 种:1. .html,2. .htm,3. .xhtml,4. .shtml,其中 .html 为最常见扩展名。 HTML 文件的扩展名 HTML 文件...
    99+
    2024-04-21
  • Springboot启动扩展点有哪些
    这期内容当中小编将会给大家带来有关Springboot启动扩展点有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.背景Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,...
    99+
    2023-06-16
  • VS代码扩展的方法有哪些
    这篇文章主要讲解了“VS代码扩展的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VS代码扩展的方法有哪些”吧!1. REST客户端REST客户端扩...
    99+
    2024-04-02
  • es6数值的扩展方法有哪些
    这篇文章将为大家详细讲解有关es6数值的扩展方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Number的方法扩展Number.is...
    99+
    2024-04-02
  • Ubuntu的终端扩展工具有哪些
    本篇内容主要讲解“Ubuntu的终端扩展工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu的终端扩展工具有哪些”吧!1 安装Terminator代码如下:sudo apt-ge...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作