调度系统 - 它是如何完成的?PHP vs Node.js


Scheduling system - How is it done? PHP vs Node.js

考虑一下Google日历中的通知系统。它会向您发送推送/电子邮件通知用户指定的时间(如 10 分钟/10 小时等)。这是如何在服务器端实现的?假设Google日历在PHP/Apache平台上,是否有一个脚本可以连续运行并检查当前时间与数据库中的时间,然后在时间匹配时推送通知?基本问题 - 服务器如何知道何时推送通知?

在 Apache/PHP 或 Node.js 上这样做更容易吗?

你在问黑魔法。你确定你想知道答案吗?

在回答你的假设问题时,"如果谷歌使用PHP进行计划通知,他们是如何做到的?"最好的答案是cron。它实际上与PHP无关,它是由操作系统(至少在基于*nix的系统上)运行的服务,它每分钟醒来一次,检查待办事项列表,运行它需要运行的东西,然后回到睡眠状态。"分钟"是一个非常重要的细节:它不会持续运行,它不会以每秒的精度运行任务,只是每分钟运行一次。

Cron 可以运行任何可执行脚本,并且旨在以调度 cron 任务的人员的权限运行,因此它可以在您的主目录之外运行 shell 脚本,并且如果正确配置了 php 脚本,它可以运行 php 脚本。

作为 cron 的替代方案,还可以编写一个新服务,该服务作为守护进程持续运行,它每隔一段时间就会唤醒以检查是否需要发送通知。你会失去cron的标准化行为,但你可以按秒调度,以及你内心想要的任何其他事情。

至于知道何时发送通知,您可以创建一个包含任务列表以及何时应该运行的数据库,然后找到一个优化良好的查询来获取当前集并处理它们。Cron或您的自定义服务(您用Node编写.js因为所有很酷的孩子都在使用Node.js),每分钟/每隔几秒钟运行一次此查询。如果你是谷歌,那么你就会想办法把它扩展到一千台机器。

首先,PHP 和 Node.js 是两个不同的术语。出于调度程序的目的,相应地实现了不同的解决方案。


.PHP

因为PHP

的本质,从它的名字来看,PHP是一个超文本处理器。每次访问者访问您网站上的 URL 时,此处理器将运行一次来处理请求,然后停止。 PHP没有系统范围的控制,这意味着它没有能力自己安排长期任务。因此,PHP 开发人员开发了两种方法来触发调度程序。这里我以Wordpress(WP)为例:

  1. 第一个 approcah 是实现一个 PHP 脚本,每次浏览器访问您的服务器时都会调用该脚本。(例如.php按索引包含)WP有一个WP_CRON。扮演此角色的 PHP 文件。它将检查计划任务,查看其计划时间是否已。如果答案是肯定的,则计划任务将立即执行。一旦你知道它是如何工作的,你就会想知道它有多不可靠。是的,一方面,如果您的网站不是那么忙,WP_CRON。如果没有正文访问您的网站,则可能不会触发 PHP。另一方面,如果您的网站太忙,WP_CRON。PHP 将每次调用并增加开销
简而言之,由

远程用户跟踪的脚本,不可靠

  1. 第二种方法是使用大多数 *inx 服务器提供的系统 CRON JOB。您可以将 cron 作业添加到服务器的 cron 表中。cron 表计划的任务每次都会按时执行。这是PHP的常用解决方案,如果准确性和可靠性至关重要。但是,它要求您在服务器上具有某些权限。

简而言之,服务器系统根据准确的 时间表,非常可靠


节点.js

对于Node.js来说,这是一个不同的故事。根据设计,Node.js 在单个进程上运行,此进程将继续运行,直到系统管理员终止。此过程还将处理来自全球所有客户端的所有请求。与只处理PHP文件的PHP不同,Node.js是一个完整的应用程序容器,可以做比PHP更多的事情。已经为 Node.js 实现了调度程序模块。检查节点计划以获取更多详细信息。