Ratchet Websocket server перестает отвечать через несколько часов

1

Я использую храповик для моего приложения websocket. Это мой код сервера.

чат-server.php

error_reporting(0);
date_default_timezone_set('Europe/Berlin');

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

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

$docRoot = "http://myshowcam.com/NewSite";
if (!isset($conn)) {
    $host = "127.0.0.1"; // Hostname    
    $user = "root"; // Username Here
    $pass = "xxxxx"; //Password Here
    $db = "myshowcam"; // Database Name
    $dbh = new PDO('mysql:dbname=' . $db . ';host=' . $host, $user, $pass);    
}
$server=IoServer::factory(new HttpServer(new WsServer(new Chat())), 9000, "myshowcam.com");
$server->run();

Для запуска сервера я использовал команду nohup как beowow

nohup php -q ratchet/bin/chat-server.php > ratchet_ws.log &

Поскольку процесс перестает работать через несколько часов, я использую процесс оболочки, чтобы проверить, работает ли этот сервер или нет, и если его запуск не запускается, сервер снова запустится.

check_process.sh

while true
do
if pgrep php > /dev/null
then
    echo Running
else
cd /mypath/project foldername/
nohup php -q ratchet/bin/chat-server.php > ratchet_ws.log &
fi
sleep 1;
done

Теперь вместо запуска chat-server.php я запускаю этот procss, как показано ниже.

nohup sh chk_process.sh > check_process.log &

Теперь мой chat-server.php работает нормально, но он не отвечает через час.

Спасибо за любую помощь.

Теги:
websocket
ratchet

1 ответ

0

nohup sh не лучший способ сохранить PHP-скрипт WebSocket. Фактически вы можете запустить PHP-скрипт в качестве системного сервиса и управлять им с service socket start service socket stop и service socket stop.

Вы делаете это, создавая файл /etc/init/socket.conf со следующим содержимым

# Info
description "Runs the Chat Web Socket"  
author      "Your Name Here"

# Events
start on startup  
stop on shutdown

# Automatically respawn
respawn  
respawn limit 20 5

# Run the script!
# Note, in this example, if your PHP script (the socket) returns
# the string "ERROR", the daemon will stop itself.
script  
    [ $(exec /usr/bin/php -f /path/to/socket.php) = 'ERROR' ] && ( stop; exit 1; )
end script  

Справочник по учебнику: http://blog.samuelatt.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню