当我打开控制台并写php server.php
时,websockets运行良好。但是当我关闭会话时,websockets停止工作。我怎样才能让它一直工作?这是我的server.php
文件 - 没什么复杂的:
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new WebSocket() // <-- My class, ignore it
)
),
SERVER_PORT,
SERVER_HOST
);
$server->run();
在CentOS 7上使用PHP 5.6运行apache 2.4.6。
答案 0 :(得分:0)
为linux安装屏幕工具:
yum -y安装屏幕
创建新屏幕:
screen -S SESSIONNAME
返回屏幕:
screen -r SESSIONNAME
退出屏幕:
ctrl + a + d
当您打开屏幕时:导航到您应用的路径并启动它。 当你想出去时使用ctrl + a + d。当您想要返回时使用:screen -r SESSIONNAME。
屏幕不是100%问题的原因。如果您的应用程序停机一天,您必须检查 内存泄漏 或应用程序中的其他一些错误。
目前转到屏幕-r SESSIONNAME,看看屏幕上会发生什么。
答案 1 :(得分:0)
我找到了一种方法 - 创建自己的服务以在后台运行websockets。对我来说,维护起来更容易。以下是我的步骤(需要EPEL):
$ yum install iperf3
$ adduser wsworker -s /sbin/nologin
$ vi /etc/systemd/system/websockets.service
然后插入内容(将ExecStart更改为您自己的内容):
[Unit]
Description=WebSockets Service
After=network.target
[Service]
Type=simple
User=wsworker
ExecStart=/usr/bin/php /var/www/public/server.php
Restart=on-abort
[Install]
WantedBy=multi-user.target
重新加载systemd并启动新服务:
$ systemctl daemon-reload
$ systemctl start websockets
启动时启动服务:
$ systemctl enable websockets
停止服务器:
$ systemctl stop websockets