所以我有一个websocket服务器设置和运行在PHP (CodeIgniter确切地说,虽然这不重要…)。我想做的是让服务器每n秒运行一次"清理"函数,如果可能的话,不使用CRON作业。基本上,我希望已经运行的websocket服务器函数检查在x时间内没有做任何事情的用户,并通过关闭他们的套接字自动"踢"他们。
从我在网络上看到的,执行服务器操作的唯一方法是一旦用户输入被接收…没有办法自动运行服务器功能…
想法?
谢谢!
最好的方法可能是实现一个守护进程。
这里有一个教程和一个伟大的类让你开始:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/
我在几个执行类似任务的守护进程上使用这个类。连续几周,我没有遇到任何麻烦。你确实需要注意你的内存使用情况。例如,请确保没有任何永远不会被垃圾回收器杀死的匿名函数。
我对你的"socketserver"一无所知,但它听起来像是用java编写的服务器,或者类似的东西,我假设你自己写的(或者至少有源代码)。你可以做的是启动一个线程,运行如下代码(这是用php写的,因为我不太懂java)
while(true) {
$oldTime = time();
while(time()-$oldTime < 10) continue;
clean();
up();
functions();
}