Php 在Websocket上执行服务器操作而无需用户输入

Php 在Websocket上执行服务器操作而无需用户输入,php,jquery,codeigniter,websocket,Php,Jquery,Codeigniter,Websocket,因此,我有一个websocket服务器设置,并在PHP中运行(确切地说是CodeIgniter,但这不重要…)。我想做的是让服务器每n秒运行一次“清理”功能,如果可能的话,不使用CRON作业。基本上,我希望已经运行的websocket服务器功能检查在x时间内没有做任何事情的用户,并通过关闭他们的套接字自动“踢”他们 从我在网络上看到的情况来看,执行服务器操作的唯一方法是在收到用户输入后…没有自动运行服务器功能的方法 想法 谢谢 最好的方法可能是实现一个守护进程 下面是一个教程和一个很好的课程,让

因此,我有一个websocket服务器设置,并在PHP中运行(确切地说是CodeIgniter,但这不重要…)。我想做的是让服务器每n秒运行一次“清理”功能,如果可能的话,不使用CRON作业。基本上,我希望已经运行的websocket服务器功能检查在x时间内没有做任何事情的用户,并通过关闭他们的套接字自动“踢”他们

从我在网络上看到的情况来看,执行服务器操作的唯一方法是在收到用户输入后…没有自动运行服务器功能的方法

想法


谢谢

最好的方法可能是实现一个守护进程

下面是一个教程和一个很好的课程,让您开始学习:


我在一些执行类似任务的守护进程上使用这个类。他们跑了几个星期,我没有任何问题。你确实需要留心你的记忆使用情况。例如,确保没有任何匿名函数永远不会被垃圾收集器杀死。

实现这一点的最佳方法可能是实现一个守护进程

下面是一个教程和一个很好的课程,让您开始学习:


我在一些执行类似任务的守护进程上使用这个类。他们跑了几个星期,我没有任何问题。你确实需要留心你的记忆使用情况。例如,请确保没有任何匿名函数永远不会被垃圾收集器杀死。

我对您的“socketserver”一无所知,但它听起来像是用java编写的服务器,或者类似的东西,我假设您自己编写的(或者至少有源代码)。您可以做的是启动一个运行如下内容的线程(这是用php编写的,因为我不太懂java)

while(true){
$oldTime=time();
当(time()-$oldTime<10)继续时;
清洁();
up();
函数();
}

我对您的“socketserver”一无所知,但它听起来像是用java编写的服务器,或者类似的东西,我假设您自己编写了它(或者至少有源代码)。您可以做的是启动一个运行如下内容的线程(这是用php编写的,因为我不太懂java)

while(true){
$oldTime=time();
当(time()-$oldTime<10)继续时;
清洁();
up();
函数();
}

“在不使用CRON作业的情况下,让服务器每n秒运行一次“清理”功能”。。。就像说,我想钉钉子,但我不想用锤子…@Brad这项任务的工具显而易见而且可用,为什么不使用它呢?@jondavidjohn,很有可能,如果旧的脚本仍在运行,你不希望CRON启动新的脚本副本,而你的脚本可能无法轻松获得该状态。在我看来,每几秒钟启动一次PHP和一份新的脚本副本是低效的,因为您只能使用一个正在运行的实例。最后,如果你对它进行守护,你可以用init.d中自己的脚本轻松地启动和停止它。我已经在服务器上运行了脚本,为什么要启动另一个脚本?我肯定有办法做到这一点,我就是一辈子都想不出来!你读过我发布的答案吗?“让服务器在不使用CRON作业的情况下每n秒运行一次“清理”功能”。。。就像说,我想钉钉子,但我不想用锤子…@Brad这项任务的工具显而易见而且可用,为什么不使用它呢?@jondavidjohn,很有可能,如果旧的脚本仍在运行,你不希望CRON启动新的脚本副本,而你的脚本可能无法轻松获得该状态。在我看来,每几秒钟启动一次PHP和一份新的脚本副本是低效的,因为您只能使用一个正在运行的实例。最后,如果你对它进行守护,你可以用init.d中自己的脚本轻松地启动和停止它。我已经在服务器上运行了脚本,为什么要启动另一个脚本?我肯定有办法做到这一点,我就是一辈子都想不出来!你读了我发布的答案了吗?服务器是用PHP编写的,里面有一个非常类似的while(true)循环,但它是用来处理更改的套接字(即发送新数据、新连接、断开连接等)。我想让服务器在没有任何输入的情况下运行函数,因为没有向服务器发送“ping”。这毫无意义吗?为什么要用php编写服务器?如果我理解你所说的,你希望在没有检测到流量的情况下运行函数,可能是这样的:while(true){while(check_for_connections()){functions();}}服务器是用PHP编写的,其中有一个非常类似的while(true)循环,但它是用来处理更改的套接字的(又名发送新数据、新连接、断开连接等)。我想让服务器运行功能,而没有任何输入,因为没有“ping”发送到服务器。这是没有意义的吗?为什么要用php编写服务器?如果我理解你所说的,你希望在没有检测到流量时运行函数,可能是这样的:while(true){while(check_for_connections()){functions();}
while(true) {
$oldTime = time();
while(time()-$oldTime < 10) continue;
clean();
up();
functions();
}