nodejs与swoole的不同是什么

发布时间 - 2022-03-14 00:00:00    点击率:
nodejs与swoole的不同:1、swoole提供协程,而nodejs不提供协程;2、默认情况下,Swoole在每个服务器上产生多个工作线程,而nodejs每台服务器可支持多个工作程序,但需要其他依赖项。

本教程操作环境:Windows10系统、Swoole4版、DELL G3电脑

nodejs与swoole的不同是什么

什么是Swoole?

Swoole是一个基于协程的异步PHP编程框架。

它主要由从事针对中国市场的大型应用程序的中国开发人员开发。因此,它已经在高流量的生产环境中进行了压力测试和验证。这是您绝对可以依赖的技术,并且可以令人兴奋地与之合作!

旋风的好处

Swoole有许多好处,包括多个Web工作人员和单独的任务工作人员,协程支持以及显着提高请求上限的能力。

Swoole的好处:

  • 支持多个Web Worker

  • 支持单独的任务工作器

  • 协程支持

  • 无需Web服务器

  • 可以增加请求上限

  • 多个Web工作器和单独的任务工作器

如上所述,Swoole具有多个Web工作器和单独的任务工作器,从而可以延迟代码。延迟长时间运行的进程为您的API和应用程序中许多以前无法实现的方法打开了大门,例如将处理推迟到发送响应之后。

协程支持

Swoole的Coroutine支持意味着即使您正在执行大量昂贵的I / O(例如,与数据库进行对话,使用文件系统,发出HTTP请求),您也可以处理许多请求。

引导程序仅加载一次,因此您无需为每次请求支付15%到25%的税。因为这是初始化的一部分,所以这意味着您在每个请求上使用的资源更少,包括RAM和CPU。对于某些应用程序,这可能意味着您需要更少的服务器,这可能已经由于异步运行时而已。

无需其他Web服务器

说到更少的服务器,您不需要Web服务器,因为Swoole是Web服务器。您可以启动一个仅安装PHP的Docker容器,并且不需要在其前面安装NGINX。

您不必在同一容器中编写NGINX或Apache,它可以只是PHP。而且,如果您要进行任何类型的容器化,那么将这些单进程容器全部使用一种语言进行的确是黄金标准。

更高要求的上限

有趣的是,Zend Framework和Laminas社区的成员认为,异步服务器能够处理的请求是标准设置所能达到的四到七倍。

当然,您可以调整Apache和NGINX的速度非常快,但是使用异步服务器可以获得更快的速度,并且Node一次又一次地证明了这一点。

缺点

尽管上面列出的特权可以为PHP应用程序带来可观的收益,但Swoole仍存在一些明显的缺点。

这些缺点可能包括:

  • 代码重装

  • 调试

  • 每个事件一名听众

  • Swoole Response的“ end()”方法

  • 非标准请求/响应API

代码重装

作为PHP开发人员,我们习惯于对代码进行更改,然后重新加载浏览器以查看更改的影响。

不幸的是,Swoole中缺少重新加载代码的功能。那是因为它是一个长期运行的过程。因此,在刷新时,它使用的是与更改前相同的代码。

Swoole中有一些热代码重新加载功能,但是现在无法重新加载引导实际服务器实例(认为应用程序实例,DI容器,配置)本身所需的任何内容。

调试

由于Swoole的协程支持与Xdebug和Xhprof不兼容,因此调试可能是一个挑战。您将需要习惯日志记录。

响应“结束”方法

在Swoole中,如果您忘记调用“ $ response-> end()”,则连接将保持打开状态,直到发生网络超时。这意味着当前进程保持打开状态,这意味着事件循环不再存在。最终,这将导致超时,并且将获得超时,但是该超时仍然是一个问题。

因此,如果您可以从中抽象出来,则可以避免头痛。(该功能是必需的,以便Swoole知道响应何时完成,并可以释放工作人员来处理另一个请求;但是,从用户的角度来看,由于忘记调用它很容易,所以这是个问题。)

因此,在Swoole运行时中,这是一项非常有用且方便的功能,但是如果您可以在自己的代码中避免这样做,那就更好了。

非标准请求/响应API

“ $ response-> end()”方法是Swoole中非标准请求/响应API的一个示例。它不遵循PSR-7规范(PHP的HTTP消息接口),甚至不遵循任何框架实现,例如Symfony的HTTPKernel或laminas-http。

因此,如果您要直接编写Swoole,但仍想使用自己的框架,则需要进行调整-但这可能是一个问题。

Swoole与NodeJS

Swoole提供了与NodeJS非常相似的功能。它具有事件循环,提供异步HTTP,网络和套接字客户端,可以创建网络服务器,列表不胜枚举。但是有什么不同呢?

协同

Swoole和NodeJS之间的最大区别可能是Swoole提供了协程。此外,它还对内置客户端(如TCP和UDP)提供协程支持。协程允许异步处理语言的内部,同时允许编写代码,就像执行是同步的一样。典型的异步编码需要传递将在异步过程完成时执行的回调,这可能会导致卷积代码以汇总结果。协程通过使其看起来与普通的同步代码相同,极大地简化了异步代码的使用。

由于Swoole协程支持包括大多数TCP / UDP操作,因此,如果您正在进行网络调用(例如,对另一台服务器进行HTTP调用),或者正在使用TCP操作与Redis通信,则可以从协程支持中受益。

多线程

Swoole与Node的不同之处还在于,默认情况下,Swoole在每个服务器上产生多个工作线程,并产生与服务器中存在的核心数量成比例的工作线程数量。因此,默认情况下,它以最佳性能运行。

拥有多个工作人员也意味着,如果一个工作人员在长时间的流程中受阻,那么可能会有另一个工作人员可以对其进行处理。这些中的每个都有相应的事件循环,这意味着每个事件都可以延迟执行或生成协程,从而极大地提高了应用程序性能。

任务器

除了每台服务器上有多个工作程序外,Swoole还可以生成独立于Web工作程序的Task Workers。

如果您要推迟某些操作而不阻止其上的Web请求,并且知道不必等待其结果,则可以改为生成一个任务,该任务将进入任务工作者池,以便您进行处理这样。这意味着您的Web工作人员池中可以进行真正的非阻塞操作!

推荐学习: swoole教程


# swoole  # php  # symfony  # nginx  # 循环  # 接口  # 线程  # 多线程  # 事件  # 异步  # docker  # redis  # 数据库  # apache  # http  # udp  # 多个  # 应用程序  # 的是  # 您可以  # 是一个  # 这是  # 加载  # 自己的  # 这意味着  # 则可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  香港服务器建站指南:免备案优势与SEO优化技巧全解析  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  深入理解Android中的xmlns:tools属性  动图在线制作网站有哪些,滑动动图图集怎么做?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Python文件异常处理策略_健壮性说明【指导】  移动端脚本框架Hammer.js  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  微信小程序 HTTPS报错整理常见问题及解决方案  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  黑客如何利用漏洞与弱口令入侵网站服务器?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何快速使用云服务器搭建个人网站?  如何在阿里云服务器自主搭建网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Python高阶函数应用_函数作为参数说明【指导】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何在IIS7中新建站点?详细步骤解析  如何快速重置建站主机并恢复默认配置?  EditPlus中的正则表达式 实战(4)  C语言设计一个闪闪的圣诞树  如何在橙子建站上传落地页?操作指南详解  如何打造高效商业网站?建站目的决定转化率  Laravel怎么上传文件_Laravel图片上传及存储配置  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  高端企业智能建站程序:SEO优化与响应式模板定制开发  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】