Итак, я использую Ratchet с PHP и в настоящее время загрузил успешный пример websocket на свой сервер.
Он работает после того, как я перехожу на SSH, а затем просто запускаю вручную «php bin / chat-server.php».
Мне было интересно, что в коммерческой ситуации, как я могу заставить чат-сервер работать?
Благодарю.
Сделайте демона.
Если вы используете symfony2, вы можете использовать компонент Process .
// in your server start command $process = new Process('/usr/bin/php bin/chat-server.php'); $process->start(); sleep(1); if ($process->isRunning()) { echo "Server started.\n"; } else { echo $process->getErrorOutput(); } // in your server stop command $process = new Process('ps ax | grep bin/chat-server.php'); $process->run(); $output = $process->getOutput(); $lines = preg_split('/\n/', $output); // kill everything (there can be multiple processes if they are spawned) $stopped = False; foreach ($lines as $line) { $ar = preg_split('/\s+/', trim($line)); if (in_array('/usr/bin/php', $ar) and in_array('bin/chat-server.php', $ar)) { $pid = (int) $ar[0]; posix_kill($pid, SIGKILL); $stopped = True; } } if ($stopped) { echo "Server stopped.\n"; } else { echo "Server not found. Are you sure it's running?\n"; }
Если вы используете родной PHP, никогда не бойтесь, popen
– ваш друг!
// in your server start command _ = popen('/usr/bin/php bin/chat-server.php', 'r'); echo "Server started.\n"; // in your server stop command $output = array(); exec('ps ax | grep bin/chat-server.php', &$output); $lines = preg_split('/\n/', $output); // kill everything (there can be multiple processes if they are spawned) $stopped = False; foreach ($lines as $line) { $ar = preg_split('/\s+/', trim($line)); if (in_array('/usr/bin/php', $ar) and in_array('bin/chat-server.php', $ar)) { $pid = (int) $ar[0]; posix_kill($pid, SIGKILL); $stopped = True; } } if ($stopped) { echo "Server stopped.\n"; } else { echo "Server not found. Are you sure it's running?\n"; }
Конечно, есть и другие полезные библиотеки PHP для работы с демонами. Googling «php daemon» даст вам много указателей.
В этом уроке показан действительно классный способ превратить WebSocket в службу * nix, чтобы он сохранялся даже при закрытии вашего SSH-соединения.
В основном вы создаете файл /etc/init/socket.conf
со следующим содержимым
# Info description "Runs the 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.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/
Запустите его в /etc/rc.d/rc
для * nix-серверов. Это должно запускать ваш PHP-скрипт всякий раз, когда сервер загружается.
На самом деле я не знаю, как это работает в отрасли, поскольку сейчас я просто программист / линукс-хоббист и студент, но это маршрут, который я бы отправил на личный сервер.
Документация храпового механизма имеет страницу развертывания . Вы проверили его?
Старый ответ: может быть плохой идеей на prod-сервере (это личное предположение), но вы можете использовать команду screen
чтобы открыть терминал, запустить демон, а затем нажать Ctrl-A, Ctrl-D и ваш терминал все еще жив , открыт в фоновом режиме. Чтобы снова подключиться к этому терминалу, подключитесь к серверу и введите screen -r
.