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

时间:2013-07-17 09:40:54

标签: php websocket hosting localhost

我在PHP中使用WebSocketshttp://code.google.com/p/phpwebsocket/)实现了聊天应用程序,在我测试它的本地主机上,我必须通过命令{{1}运行WebSockets服务器在localhost上启动服务器,文件一直运行,直到我在Ubuntu终端上按“Ctrl + c”。我的意思是它继续运行while循环,这是非常正常的bcoz服务器应该听取请求。

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

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

请提前帮助,谢谢。

3 个答案:

答案 0 :(得分:8)

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

您可以使用exec在触发脚本的命令行上运行某些内容。例如,如果您有来自http://mysite.com/server/start之类的网址的控制器操作,则可以嵌入该行:

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

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

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

在某些时候,您可能想要停止此服务器。您可以使用passthruposix_kill使用一点unix CLI魔法来完成此操作,也许可以使用您从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);

答案 1 :(得分:0)

实际上有很多方法可以让守护进程在没有shell访问的情况下运行,但托管公司会阻止shell访问,因为他们不希望你运行守护进程!

你必须在shell访问的服务器上进行。我的意思是,你必须为你的应用程序提供VPS,共享主机对你没用。

答案 2 :(得分:0)

使用shell_exec从可以触发的脚本中运行命令。代码应该像这样:

shell_exec("php -q server.php");