Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么可以';没有客户端就不能控制服务器吗?_Php_Node.js_Server_Client - Fatal编程技术网

Php 为什么可以';没有客户端就不能控制服务器吗?

Php 为什么可以';没有客户端就不能控制服务器吗?,php,node.js,server,client,Php,Node.js,Server,Client,好吧,在服务器存在的这么多年里,你是说如果我想让脚本在服务器上每n秒运行一次,你能做的最好的事情就是给我一个糟糕的cron任务?必须有一种内置于编程语言或其他东西中的方法,使我能够每隔一段时间运行函数、脚本或其他东西,而无需客户端向服务器发送请求。有什么语言可以让你这么做吗?节点js?那么大公司如何进行服务器维护呢?为什么php可以不断地监听请求和Webhook,但却无法控制它设计用来控制的东西,而不需要其他人发送请求 为什么没有客户端就不能控制服务器 它可以。服务器可以响应客户端发送的请求,但

好吧,在服务器存在的这么多年里,你是说如果我想让脚本在服务器上每n秒运行一次,你能做的最好的事情就是给我一个糟糕的cron任务?必须有一种内置于编程语言或其他东西中的方法,使我能够每隔一段时间运行函数、脚本或其他东西,而无需客户端向服务器发送请求。有什么语言可以让你这么做吗?节点js?那么大公司如何进行服务器维护呢?为什么php可以不断地监听请求和Webhook,但却无法控制它设计用来控制的东西,而不需要其他人发送请求

为什么没有客户端就不能控制服务器

它可以。服务器可以响应客户端发送的请求,但也可以做其他事情

好吧,在服务器存在的这么多年里,你是说如果我想让脚本在服务器上每n秒运行一次,你能做的最好的事情就是给我一个糟糕的cron任务

我不知道是谁对你说的,但那根本不是真的。即使是shell脚本也可以做到这一点


必须有一种内置于编程语言或其他东西中的方法,使我能够每隔一段时间运行函数、脚本或其他东西,而无需客户端向服务器发送请求

一定有,一定有。参见下面的示例

有什么语言可以让你这么做吗

是的,有很多这样的语言。例如,JavaScript从1995年开始就有了
setTimeout()
setInterval()

节点js

是的,Node.js可以做到这一点和其他许多事情。由于您特别询问了Node.js,以下是您可以使用的模块soem:

事实上,还有更多的模块处理计划任务

那么大公司如何进行服务器维护呢

有很多方法可以做到这一点,包括上面提到的方法。有时他们使用cron,有时他们使用webhook和其他RPC来协调大量的服务器并启动各种任务,有时服务器自己在做。在某些情况下,您可以使用流、队列或发布/订阅服务来管理更复杂的场景

为什么php可以不断地监听请求和Webhook,但却无法控制它设计用来控制的东西,而不需要其他人发送请求

因为PHP不是一个独立的服务器。您可以将在PHP中编写的内容视为一种请求处理程序。您需要请求处理程序的请求来处理请求

相比之下,在Node中编写的程序是独立的程序,它们可以继续运行,并且可以在需要的时候做任何事情,它们只是碰巧响应客户机的请求。另一方面,PHP脚本不是独立的长时间运行的程序,但Apache或nginx等服务器会在每个请求到由特定PHP脚本处理的特定路由时调用PHP脚本,然后脚本运行,完成为单个请求提供服务的工作并完成,只有在以后发生另一个请求时才会调用

现在,如果您希望有一个周期性运行的PHP脚本,那么您可以这样做:将脚本放在服务器上,如果您愿意,它只能响应localhost,并测试它是否每次都运行,例如对
POST请求http://localhost:1234/script.php
如果确实如此,您可以做一些事情让它按您的意愿每n秒运行一次:

(1) 你可以把
curl-xposthttp://localhost:1234/script.php
在crontab中

(2) 可以制作如下所示的shell脚本:

#!/bin/sh
while true; do
  curl -X POST http://localhost:1234/script.php
  sleep 10
done
#!/usr/bin/env node
const request = require('request');
setInterval(() => request.post('http://localhost:1234/script.php'), 10000);
(3) 您可以制作如下节点程序:

#!/bin/sh
while true; do
  curl -X POST http://localhost:1234/script.php
  sleep 10
done
#!/usr/bin/env node
const request = require('request');
setInterval(() => request.post('http://localhost:1234/script.php'), 10000);
(4) 您可以使用任何其他允许您运行独立程序的语言


这是一种让PHP脚本定期运行的方法。

我不确定这是一个问题还是一句废话。此外,我认为您可能会对客户机-服务器体系结构的工作方式感到困惑。“一种内置于编程语言中的方式,或者让我每隔一段时间运行一个函数、脚本或其他东西的方式”-您指的是循环?是的,大多数编程语言都有无限循环
while(true){//loopity loop!}
您似乎很不安。@E.SK有时无限循环是保持服务器活动的原因。像nginx或Node.js这样的服务器基于事件循环的概念。这个循环是无限的。如果不是这样,服务器将停止服务请求,这将破坏服务器。您还没有真正回答我的问题。Javascript是客户端。我需要做cron作业所做的事情,每x秒运行一次php,但不需要cron作业。我不相信大公司依赖cron作业,这似乎不够合法。从本质上讲,是否有一种服务器端语言不必像您描述的那样充当请求处理程序as@E.SKjs是服务器端的,它是JavaScript。请参阅:好的,那么为什么NodeJS可以每隔一段时间控制服务器,而php不能?(无客户机请求)@E.SK,因为在Node中编写的程序是独立的程序,可以持续运行,可以在需要的时候做任何事情,并且它们恰好响应客户机的请求。另一方面,PHP脚本不是独立的长时间运行的程序,但Apache或nginx之类的服务器会在每个请求到特定的路由时调用它们,该路由由特定的PHP脚本处理,然后脚本运行,完成为单个请求提供服务的任务并完成,只会在以后为另一个请求调用。