【问题标题】:setting up websockets without command line在没有命令行的情况下设置 websocket
【发布时间】:2013-01-31 02:10:57
【问题描述】:

如何在不使用命令行的情况下按照这样的教程进行操作?

http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/

我需要能够使用 websockets,但有一个共享服务器并且无法访问命令行。

我不能简单地从浏览器运行脚本,如果在我关闭浏览器/断开互联网连接时脚本会停止运行。

【问题讨论】:

    标签: php websocket phpwebsocket


    【解决方案1】:

    直到刚才我才知道 CRON 的 @reboot 指令,所以 @Octav O 解决方案可能要好得多。但在测试时,我发现以下代码(在Saran's websocket tutorial 上找到)非常有用。

    将此作为websocket_launch.sh保存在与server.php相同的目录中...

    PID=`ps -aef | grep "server.php" | grep -v grep | awk '{print $2}'`
    if [ -z $PID ]
    then
        #echo "Launching now"
        nohup php server.php > error_log &
    else
        #echo "Running as PID $PID"
    fi
    

    ... 然后每分钟使用 CRON 运行 shell 脚本。该脚本检查 server.php 是否正在运行,如果没有,则启动它。

    【讨论】:

      【解决方案2】:

      假设您的共享主机提供商支持 crontab 和 cron 作业(大部分都支持),请将以下作业添加到 crontab:

      @reboot nohup php /path/to/server.php 2>&1 >/dev/null &
      

      此外,您需要立即启动它,因此只需创建以下 PHP 文件并在浏览器中访问一次即可:

      <?php shell_exec('nohup php /path/to/server.php 2>&1 > /dev/null &');?>
      

      这应该可以解决问题。希望您的共享主机提供商允许进行 execve() 调用。祝你好运!

      【讨论】:

      • 这实质上会保持脚本始终打开/接受连接吗?我可以运行 cron 作业并运行该脚本,但它实际上并没有在页面上的任何位置显示“crontab”。我猜这只是暗示那些是'crontab'并且它应该工作?..我可以运行shell_exec命令。你的意思是希望他们允许这个命令?
      • 如果您使用 nohup 启动 server.php 文件,它将始终保持脚本打开并接受连接。基本上,前面发布的shell_exec() PHP 代码将启动您的套接字服务器。 cron 作业只是为了在您的共享托管服务器重新启动时启动 server.php 文件。
      • 感谢您的时间和解决方案
      • 服务器是否允许特定端口(如 6800)中的 websocket
      • @OctavO,我们怎样才能阻止它?
      【解决方案3】:

      那么尝试在浏览器上运行 Server.php。大多数时候 php-cli-script 在浏览器上也可以正常工作(直到使用一些仅命令行功能,如 argv/argc 等)。在另一个浏览器的其他浏览器选项卡上,您可以运行通常的 URL,如给定教程中的屏幕截图。

      一件重要的事情,请检查您的共享服务器上是否启用了套接字和其他必需的扩展。

      【讨论】:

      • 这实际上会启动我的 php 脚本并让它在服务器上运行吗?...听起来这就是需要发生的事情
      • 它将启动您的服务器脚本并继续运行,直到浏览器选项卡/窗口关闭(但仅在服务器代码 id 不依赖于某些 php cli-only 功能的情况下。)。
      • 如果没有在服务器上运行的脚本,你就做不到......即使你实际上没有访问服务器的权限,你也可以“闯入”它通过使用 php 的 system() 并在那里初始化服务器。我建议,或者只是为此目的获得合适的主机。
      • 或者实际上,当我考虑到 if system() (或 exec() 或类似的东西)可用时,您也许可以运行“php脚本。 php &”为了让它在后台运行,然后只需关闭浏览器,它可能会保持活动......
      猜你喜欢
      • 1970-01-01
      • 2012-07-15
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多