在 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章