在共享主机上以PHP格式启动WebSockets服务器



我有一个使用 WebSockets (http://code.google.com/p/phpwebsocket/( 在 PHP 中实现的聊天应用程序,当我测试它时,我必须通过命令运行 WebSockets 服务器"php server.php",它在本地主机上启动服务器,文件一直运行,直到我在 Ubuntu 终端上按"Ctrl + c"。我的意思是它继续运行 while 循环,这是很正常的,因为服务器应该监听请求。

现在我的怀疑是我已经在共享主机上托管了这个应用程序,这没有给我SSH访问权限,我的意思是我无法获得像终端一样的界面来运行我的命令,那么我将如何运行该server.php脚本来启动我的服务器现在?

是的,我提到的一件事我只需要运行一次脚本,然后脚本将继续运行,并且托管服务提供商也允许设置cron jobs

请帮忙,提前谢谢。

没有SSH访问权限来访问您的共享主机是非常不稳定的。可是。。。

您可以使用exec从触发的脚本在命令行上运行某些内容。例如,如果您有一个从 URL (如 http://mysite.com/server/start(调用的控制器操作,则可以嵌入以下行:

$lastLine = exec("php server.php");

当然,在命令完成之前,此命令不会返回,因此您将永远不会从此脚本获得响应(除非它失败(。所以我会使用 popen ,它将分叉进程并立即返回,允许您的控制器返回响应。

$handle = popen("php server.php", "r");

在某些时候,您可能想要停止此服务器。您可以使用带有一点 unix CLI 魔术的 passthruposix_kill来完成此操作,也许在您从 URL 调用的另一个控制器操作中,例如 http://mysite.com/server/stop,您可以嵌入:

$output = passthru('ps ax | grep server.php');
$ar = preg_split('/ /', $output);
if (in_array('/usr/bin/php', $ar)) {
    $pid = (int) $ar[0];
    posix_kill($pid, SIGKILL);
实际上,有很多

方法可以在没有 shell 访问权限的情况下运行守护进程,但托管公司将阻止 shell 访问,因为他们不希望您运行守护进程!

您必须在 shell 访问的服务器上使用它。我的意思是,您的应用程序必须有VPS,而共享主机对您没有用。

最新更新