我正在使用棘轮为我的websocket应用程序.Below是我的服务器代码。
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命令用作beolow
nohup php -q ratchet/bin/chat-server.php > ratchet_ws.log &
由于进程在几个小时后停止工作,我使用shell进程检查此服务器是否正在运行,如果它未运行,将再次启动服务器。
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正常运行,但在一小时后它没有响应。
感谢您的帮助。
答案 0 :(得分:0)
nohup sh
不是保留WebSocket PHP脚本的最佳方法。您实际上可以将PHP脚本作为系统服务运行,并使用service socket start
和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.samuelattard.com/the-tutorial-for-php-websockets-that-i-wish-had-existed/