好的,多年来服务器已经存在,如果我想在服务器上每隔n秒运行一次脚本,你就告诉我你能做的最好的事情就是给我一个糟糕的cron工作?必须有一种内置于编程语言中的方法,或者允许我间隔运行函数或脚本或其他东西而不需要客户端向服务器发送请求的方法。是否有任何语言可以让你这样做?节点js?大公司如何进行服务器维护呢?为什么php可以不断地监听请求和webhooks,但是无法控制其设计的控制权而没有其他人发送请求?
答案 0 :(得分:0)
为什么没有客户端可以控制服务器?
它可以。服务器可以响应客户端发送的请求,但也可以做其他事情。
好的,多年来服务器已经存在,你告诉我你能做的最好的事情就是如果我想在我的服务器上每n秒运行一次脚本,就给我一个糟糕的cron工作?
我不知道是谁说的,但事实并非如此。即使是shell脚本也可以做到这一点。
必须有,有。请参阅下面的示例。必须有一种内置于编程语言中的方法,或者允许我每隔一段时间运行一个函数或脚本,而不需要客户端向服务器发送请求。
是否有任何语言可以让您这样做?
是的,有很多这样的语言。例如,JavaScript有setTimeout()
和setInterval()
,因为类似于1995年。
节点js?
是的,Node.js可以做到这一点以及许多其他事情。既然你专门询问了Node.js - 这里有你可以使用的模块:
事实上,还有更多模块可以处理计划任务。
大公司如何进行服务器维护?
有很多方法可以做到这一点,包括上面提到的方法。有时他们使用cron,有时他们使用webhooks和其他RPC来编排大量服务器并启动各种任务,有时服务器自己也会这样做。在某些情况下,您可以使用流,队列或发布/订阅服务来管理更复杂的方案。
为什么php可以不断地监听请求和webhooks但是无法控制其设计的控制权而没有其他人发送请求?
因为PHP不是独立服务器。您可以将您在PHP中编写的内容视为一种请求处理程序。并且您需要请求处理程序来处理请求。
相比之下,用Node编写的程序是独立的程序,可以继续运行,可以随心所欲地执行,并且只是响应来自客户端的请求。另一方面,PHP脚本不是独立的长期运行程序,但是在由特定PHP脚本处理的特定路由的每个请求上由Apache或nginx等服务器调用它们,然后脚本运行,执行它提供此单个请求并完成的工作,如果发生,则仅在稍后调用另一个请求。
现在,如果你想有一个定期运行的PHP脚本,那么你可以这样做:把脚本放在服务器上,如果你愿意,它只能响应localhost,如果你每次运行它都会测试它做例如对http://localhost:1234/script.php
的POST请求,如果是,您可以做几件事让它每n秒运行一次:
(1)您可以将curl -X POST http://localhost:1234/script.php
放入crontab
(2)您可以制作这样的shell脚本:
#!/bin/sh
while true; do
curl -X POST http://localhost:1234/script.php
sleep 10
done
(3)您可以制作这样的节点程序:
#!/usr/bin/env node
const request = require('request');
setInterval(() => request.post('http://localhost:1234/script.php'), 10000);
(4)您可以使用任何其他语言来运行独立程序。
这是您希望定期运行PHP脚本的一种方法。