在共享主机上的php中启动websockets服务器

bit*_*eky 5 php hosting localhost websocket

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

现在我的疑问是我已经在共享主机上托管了这个应用程序,它不能让我SSH访问,我的意思是我不能得到一个终端,就像我曾经运行我的命令的接口,所以我将如何运行该server.php脚本来启动我的服务器现在?

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

请提前帮助,谢谢.

mat*_*exx 8

没有SSH访问您的共享主机是非常不稳定的.那说......

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

$lastLine = exec("php server.php");
Run Code Online (Sandbox Code Playgroud)

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

$handle = popen("php server.php", "r");
Run Code Online (Sandbox Code Playgroud)

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

$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);
Run Code Online (Sandbox Code Playgroud)