【问题标题】:starting a websockets server in php on shared hosting在共享主机上用 php 启动 websockets 服务器
【发布时间】:2013-07-15 19:16:02
【问题描述】:

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

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

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

请帮忙,提前谢谢。

【问题讨论】:

    标签: php websocket hosting localhost


    【解决方案1】:

    无法通过 SSH 访问您的共享主机非常不稳定。那就是……

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

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

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

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

    在某些时候,您可能想要停止此服务器。您可以使用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);
    

    【讨论】:

    • 能否请您解释更多或提供链接、代码以在共享主机上以 php 启动 websockets 服务器
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 2013-10-17
        • 2011-03-11
        • 2020-11-29
        • 1970-01-01
        相关资源
        最近更新 更多