您好,八月我们将在莫斯科与其他城市的
发言人举行会议,
BeerPHP会议,以及
广播给无法参加会议的所有人
的官方部分。
今天我们开始介绍演讲者 。 Sergey Zhuk将从Bryansk参加会议-他所在的城市没有聚会,他对异步PHP有一些要说的东西:他写了有关此书的书籍,一系列文章等等。 以下是有关此内容的最新播客的录音稿,收听和查看发行版的链接以及有关mitap本身的详细信息。
Pyotr Myazin aka PQR :今天,我与ReactPHP的主要专家之一联系。 Sergey,我最近访问了reactphp.org,并在主页上找到了您。 您在该主题上写了很多东西,甚至有自己的带有视频说明的频道。 告诉我你是怎么想到的,是什么吸引了您的ReactPHP?实际上,您会重新发现您使用多年的语言
Sergey aka
seregazhuk :两年前,在上一份工作中,有必要编写一个脚本,该脚本会不断吸引客户并非常迅速地工作。 该任务必须在“昨天”完成,只有PHP开发人员在团队中—没有时间来使用新的堆栈了。 但是事实证明,每个人都对ReactPHP有所了解。 他将自己定位为生产就绪型,一切都非常容易:我们只是通过composer建立了公司,并且可以编写异步代码。 结果,他们在上面写了一个解决方案,启动了它,每个人都很满意。
我意识到我们有一个工具-但是几乎没有文章,无论是俄语还是英语,都没有诸如“我们遇到了这样的问题,我们这样解决过”这样的实际例子。 结果,我在自己的博客上写了几篇文章,得到了积极的反馈,仅此而已-莫名其妙地使我着迷。 我们已经习惯了Request-Response模型,但是值得将其加载到异步代码中,您将立即问:“那怎么可能?”
彼得:让我们再谈一谈,异步代码为我们解决了什么问题,为什么特别需要ReactPHP?
Sergey:几乎每个应用程序都有API调用,与文件系统的交互或数据库查询。 当我们等待来自他们的答复时,我们的处理器处于空闲状态-而不是做一些有用的事情。 您不能等待答案,而是开始非阻塞操作并继续前进。 随之而来的问题是:“如果到处都是I / O的ReactPHP,我们的应用程序会快很多倍吗?”
不幸的是,您不能仅仅将我们的应用程序重写为异步应用程序

这是谢尔盖·朱克(Sergey Zhuk)Seryozha是《 ReactPHP对于初学者的书》,《使用ReactPHP和PHP OOP学习事件驱动的PHP》一书的作者以及其他许多用途
Sergey:我会考虑在性能至关重要的情况下使用ReactPHP,而I / O是我们的僵局,它阻止了所有事情。 此外,我建议不要将整个应用程序转移到异步导轨上,即重写此特定的僵尸程序。 通常,与试图重写整个应用程序相比,将异步切片插入传统的阻塞代码要容易得多。
彼得:好的,但是为什么我们不就开始一些PHP进程呢? 这个空闲,但是下一个很忙。谢尔盖:我们如何协调结果? 假设我们需要从三个来源获取数据,调用三个API,然后组合结果并将其提供给用户。 如果我们创建三个独立的流,那么就会出现协调结果的问题。
使用异步方法,我们可以简单地运行它们,可以说是并行运行,然后得到结果并进行处理。 使用线程,您将不得不以某种方式协调此球,即状态会出现问题。 这似乎比异步方法更为复杂。
彼得:我明白。 我脑子里有一个想法:如果我们想增加用户数量。 如果每秒处理一次,Symfony的整个应用程序堆栈将如何以异步版本启动并处理大量连接?谢尔盖:我不会那样做。 通常,应用程序不会完全减慢速度。 如果出现性能问题,则很可能内部存在几个瓶颈,这也很可能导致I / O缓慢。 现在,我将这些瓶颈转化为ReactPHP。
它看起来像是通常的阻塞代码中的一个小型异步程序:例如,我们并行调用了三个请求,将它们处理并发送给用户一个响应,总执行时间将等于最慢请求的时间。 如果使用传统方法,我们将等待第一个请求,第二个和第三个请求。 但是应用程序并没有因此而变得异步。
如果我们将其与NodeJS和其他工具进行比较?

左-Pyotr Myazin,五分钟PHP的主持人他将参加mitap比赛,并准备参加之后的聚会。 如果有关于新播客的主题,我很乐意讨论
彼得:如果我们将其与NodeJS或Go进行比较,则整个应用程序确实存在异步性。 对数据库,对文件系统的所有请求-它们在内部都是异步的。 从原则上讲,这是否意味着如果一切都以异步形式编写,是否有任何收益?谢尔盖:如果最初的问题是I / O,
那将是有利可图的。 那是的,我们将解决它。 我们的代码将尽可能高效,能够处理最大数量的任务,而不是闲置并等待处理此输出。 但是,如果最初问题不在I / O中,然后异步编写所有内容,那么我们就不可能赢得任何东西,并且我们可以获得难以阅读和维护的复杂代码。
彼得:回到PHP。 因此,我们有ReactPHP,以及著名的类似产品Swoole,Amp和Ext-async。 并比较一下告诉我,这些项目之间有什么区别,ReactPHP有多好?与同一个Swoole相比,它速度快并且有任何缺点吗?
Sergey:坦白地说,在这三者中,我只测试了Amp,因为它像ReactPHP一样,是开箱即用的。 也就是说,我们通过作曲器放置了必要的组件,您已完成。 在这里,我不太喜欢带有扩展的故事。 因为在我看来,如果让我们独自面对PHP和异步问题,那么使用语言和本机是更合理的-如果我们使用其他扩展名,那么这里不是特别的异步PHP,而是PHP的异步扩展。
ReactPHP如何真正投产?
彼得:“长期支持”写在他们的网站上。 也就是说,某种长期支持,而无需对API进行重大更改。 是这样吗 一切都够高吗?谢尔盖:是的。 ReactPHP项目本身已经很老了。 他从第十二年开始工作,事实证明他已经七岁了。 他已经有足够的生产准备时间。 是的,此外,这是对主要组件的长期支持,为期两年。 也就是说,您可以放心地与这些组件捆绑在一起,获得修复,更新,而不必担心向后兼容性。 他们承诺保持两年的版本,没有任何问题。 我认为这真的很酷,这是向前迈出的一大步。 据我所记得,直到最近,Amp才讨论了其中的一些组件,但他们尚未完全确定接口和公共API。
彼得:您建议从哪里开始学习ReactPHP? 当然,除了官方文档和您的视频教程。 所有社区都在哪里,是否存在电报聊天或不和谐聊天,论坛?Sergey:不幸的是,我不知道这样一个直接的社区。 有一个非常活跃的
Twitter帐户 :您可以在那里提问,提问和感兴趣。 矿工的反应非常快-您可以在Twitter上亲自给他们写信。 我这样做了,问他们一些事情。
彼得:好的,谢谢您提供有关ReactPHP的这么详尽的故事-在这方面,我将宣布“ 熊猫聚会”,该聚会将于8月22日在莫斯科Skyeng办公室举行。 您将在那里表演,对吗?谢尔盖:是的,是的。 过来聊天。
彼得:关于域驱动设计的报告也将在PHP的背景下,这也是一个很有趣的话题,(并且添加了其他几个),而且,正如组织者告诉我的那样,将会有一些聚会。好东西: