2017-10-16 4 views
0

Lorsque j'ouvre la console et que j'écris php server.php les Websockets fonctionnent correctement. Mais quand je ferme la session, les websockets cessent de fonctionner. Comment puis-je le faire fonctionner tout le temps? Ceci est mon fichier server.php - rien de compliqué:WebSockets sur CentOS 7 après la fermeture de la console

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(); 

Exécution apache 2.4.6 avec PHP 5.6 sur CentOS 7.

+0

Lorsque vous console près, vous fermez également votre application. Utiliser des écrans Utilisation hors écran: ctrl + A ET ctrl + D. –

+0

https://uisapp2.iu.edu/confluence-prd/pages/viewpage.action?pageId=115540034 –

+0

Comment cela peut-il m'aider? Je n'ai pas besoin de «Out of screen» mais de websockets pour fonctionner jusqu'à ce que je l'arrête en quelque sorte (comme le service), il doit fonctionner à chaque fois. – debute

Répondre

0

outil écran d'installation pour Linux:

yum -y install écran

Créer un nouveau écran:

screen -S SESSIONNAME 

Retour à l'écran:

screen -r SESSIONNAME 

Sortir de l'écran:

ctrl + a + d 

Lorsque vous écran ouvert: naviguez vers le chemin de votre application et démarrer. Quand vous voulez sortir, utilisez ctrl + a + d. Lorsque vous voulez revenir, utilisez: screen -r SESSIONNAME.

L'écran n'est pas la raison de vos problèmes 100%. Si votre application descend pendant un jour, vous devez vérifier fuites de mémoire ou un autre bug dans l'application.

Pour le moment aller à l'écran -r SESSIONNAME pour voir ce qui se passe intro votre écran.

+0

Je comprends, mais j'ai trouvé un meilleur moyen (pour moi) avec un service personnalisé, que je peux activer pour redémarrer et qui est plus pratique que les écrans. – debute

0

J'ai trouvé un moyen - créer son propre service pour exécuter des websockets en arrière-plan. Pour moi, c'est plus facile à entretenir. Voici mes étapes (EPEL nécessaire):

$ yum install iperf3 
$ adduser wsworker -s /sbin/nologin 
$ vi /etc/systemd/system/websockets.service 

Insérez ensuite le contenu (changer le ExecStart à votre propre):

[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 

Recharger systemd et commencer un nouveau service:

$ systemctl daemon-reload 
$ systemctl start websockets 

Début du service au démarrage:

$ systemctl enable websockets 

Arrêter le serveur:

$ systemctl stop websockets 

Original article