在 Codeigniter 中无需终端(无 AJAX)的页面加载时自动运行 PHP 服务器

Posted

技术标签:

【中文标题】在 Codeigniter 中无需终端(无 AJAX)的页面加载时自动运行 PHP 服务器【英文标题】:Automatically run PHP server on page load without terminal (NO AJAX) in Codeigniter 【发布时间】:2016-03-09 16:34:56 【问题描述】:

我正在使用 Ratchet websockets 开发一个聊天系统。有必要从终端命令“php”启动服务器,但我需要让这在用户打开聊天页面时自动发生。我尝试了 exec()、shell_exec() 和 system(),但问题是我的 chat-server.php 文件没有返回消息,它只是启动服务器导致 localhost 继续加载。 这是chat-server.php 文件:

<?php
use Ratchet\Server\ioserver;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);
$server->run();

这是我加载视图的消息控制器:

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');

    class Messages extends CI_Controller   

    function index()
    
        $this->load->view( 'includes' );
        $this->load->view( 'messages_view' );
    

【问题讨论】:

【参考方案1】:

这是因为 PHP 一直等到 exec()、shell_exec() 和 system() 命令完成。您必须更改调用 exec 的方式以使其启动一个单独的进程。可以在这里找到解决方案most simple way to start a new process/thread in PHP

【讨论】:

太棒了,它现在可以工作了!如果您不介意,还有一个问题,一旦用户关闭聊天页面,我该如何终止该进程? @user3054529 简短的回答:你没有。 ***.com/a/11026165/4854216 @user3054529 我没有使用 Ratched 但也许你可以检测到 websocket 上的活动?就像用户离开或处于非活动状态的聊天并基于此关闭套接字以便 php 进程自行结束?

以上是关于在 Codeigniter 中无需终端(无 AJAX)的页面加载时自动运行 PHP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:无循环地插入多条记录

在后台运行 Codeigniter URL

从后端异步更新/通知 HTML,无需 AJAX 轮询

Codeigniter 3 - 会话库

Codeigniter - 出现 404 Not Found 错误

Codeigniter AJAX 示例