我試圖啓動棘輪的chat-server.php文件,該文件需要從php文件啓動套接字服務器,以便每當客戶端訪問頁面服務器啓動,但沒有發生。這chat-server.php文件需要從終端運行,但我試圖在用戶訪問時從主頁面運行它。如何讓腳本在後臺運行 - 不工作
文件結構
./index.php
./config.php
./vendor/(all供應商文件)
./src/MyApp /Chat.php
./js/app.js
./inc/connect.php < --database連接文件
./inc/send-message.php
./inc/startServer.php
./inc/bg。 PHP
./inc/serverStatus.txt
./css/index.css
./css/reset.css
./bin/chat-server.php
的config.php
<?php
include_once ("./inc/startServer.php");
?>
聊天server.php
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
if(isset($startNow)){
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();
}
?>
bg.php
<?php
$startNow = 1;
include_once ("../bin/chat-server.php");
?>
startServer.php
<?php
$statusFile = dirname(__FILE__).'/serverStatus.txt';
$status = file_get_contents($statusFile);
if($status == "0"){
function execInBackground($cmd) {
if(substr(php_uname(), 0, 7) == "WINDOWS") {
pclose(popen('start /B ' . $cmd, 'r'));
file_put_contents($statusFile, 1);
}
else {
exec($cmd . ' > /dev/null &');
file_put_contents($statusFile, 1);
}
}
execInBackground("php " . dirname(__FILE__) . "/bg.php");
}
?>
serverStatus.txt
它的默認值已被設置爲
注意:相應地更新了代碼,但現在仍然不起作用。
加我對重新啓動服務器以避免任何故障或在所有客戶端離開時如何關閉服務器沒有任何意見。
我真的不知道爲什麼這個問題是downvote,但仍然感謝它。 – Ayan
您正在爲每個客戶啓動一個新服務器?爲什麼你需要手動啓動服務器而不是在後臺運行?這個問題只是尖叫XY問題。 – PeeHaa
@PeeHaa,不,這個代碼應該只爲所有的客戶端啓動一個服務器。看看,有關於服務器狀態的檢查。 – spirit