我正在使用Ratchet websockets在聊天系统上工作。有必要从终端命令"php"启动服务器,但我需要在用户打开聊天页面时让这种情况自动发生。我尝试了exec(),shell_exec()和system(),但问题是我的聊天服务器.php文件没有返回消息,它只是启动服务器,导致本地主机继续加载。这是聊天服务器.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' );
}
}
这是因为 PHP 会等到 exec()、shell_exec() 和 system() 命令完成。您必须更改调用 exec 的方式,以使其启动单独的进程。解决方案可以在这里找到在PHP中启动新进程/线程的最简单方法