From f78b177c7956e570daefdbd1da5143bed150d21e Mon Sep 17 00:00:00 2001 From: Mark Friedrich Date: Tue, 7 May 2019 23:18:03 +0200 Subject: [PATCH] - Updated README.md --- README.md | 111 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 87 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index cb36f96..98387c7 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,100 @@ -### [WIP] WebSocket server for [Pathfinder](https://github.com/exodus4d/pathfinder) +## WebSocket server for [Pathfinder](https://github.com/exodus4d/pathfinder) -####Requirements: -1. A working instance of *[Pathfinder](https://github.com/exodus4d/pathfinder)* **(>= v1.2.0)**. -2. A working installation of *[ØMQ](http://zeromq.org/area:download)* **(>= v4.2.0)**. - Which is a "network library" written in C (very fast) that handles TCP based socket connections - between your existing _Pathfinder_ installation and this WebSocket server extension. [download *ØMQ*](http://zeromq.org/area:download). -3. A new [PHP extension for *ØMQ*](http://zeromq.org/bindings:php) that handles the communication between this WebSocket server and *ØMQ*. **(>= v1.1.3)** +### Requirements +- A working instance of *[Pathfinder](https://github.com/exodus4d/pathfinder)* **(≥ v1.2.0)** +- [_Composer_](https://getcomposer.org/download/) to install packages for the WebSocket server -####Install: -Make sure you meet the requirements before continue with the installation. - -1. Install [Composer](https://getcomposer.org/download/) +### Install +1. Checkout this project in a **new** folder (NOT the install for _Pathfinder_ itself) e.g. `/var/www/websocket.pathfinder` +1. Install [_Composer_](https://getcomposer.org/download/) 2. Install Composer dependencies from `composer.json` file: - - `$ composer install` OR - - `$ php composer.phar install` (change composer.phar path to your Composer directory) -3. Start WebSocket server `php cmd.php` + - `$ cd /var/www/websocket.pathfinder` + - `$ composer install` +3. Start WebSocket server `$ php cmd.php` + +### Configuration + +#### Default -####Default Configuration **Clients (WebBrowser) listen for connections** -- Host:`0.0.0.0.` (=> any client can connect) -- Port:`8020` -- URI:`127.0.0.1:8020` (Your WebServer (e.g. Nginx) should pass all WebSocket connections to this source) +- Host: `0.0.0.0.` (=> any client can connect) +- Port: `8020` +- URI: `127.0.0.1:8020` (Your WebServer (e.g. Nginx) should pass all WebSocket connections to this source) -**TCP TcpSocket connection (Internal use fore WebServer <=> WebSocket communication)** -- Host:`127.0.0.1` (=> Assumed WebServer and WebSocket Server running on the same machine) -- Port:`5555` +**TCP TcpSocket connection (Internal use for WebServer ⇄ WebSocket communication)** +- Host: `127.0.0.1` (=> Assumed WebServer and WebSocket Server running on the same machine) +- Port: `5555` - URI: `tcp://127.0.0.1:5555` + +#### Custom [Optional] -**[Optional]** The default configuration should be fine for most installations. You can change/overwrite the default **Host** and **Port** configuration by adding additional CLI parameters when starting the WebSocket server: -`php cmd.php --pf_listen_host [CLIENTS_HOST] --pf_listen_port [CLIENTS_PORT] --pf_host [TCP_HOST] --pf_port [TCP_PORT]` +`$ php cmd.php --pf_listen_host [CLIENTS_HOST] --pf_listen_port [CLIENTS_PORT] --pf_host [TCP_HOST] --pf_port [TCP_PORT]` + +### Unix Service (systemd) -####Info: +#### New Service +It is recommended to wrap the `cmd.php` script in a Unix service, that over control the WebSocket server. +This creates a systemd service on CentOS7: +1. `$ cd /etc/systemd/system` +2. `$ vi websocket.pathfinder.service` +3. Copy script and adjust `ExecStart` and `WorkingDirectory` values: + +``` +[Unit] +Description = WebSocket server (Pathfinder) [LIVE] environment +After = multi-user.target + +[Service] +Type = idle +ExecStart = /usr/bin/php /var/www/websocket.pathfinder/pathfinder_websocket/cmd.php +WorkingDirectory = /var/www/websocket.pathfinder/pathfinder_websocket +TimeoutStopSec = 0 +Restart = always +LimitNOFILE = 10000 +Nice = 10 + +[Install] +WantedBy = multi-user.target +``` + +Now you can use the service to start/stop/restart your WebSocket server +- `$ systemctl start websocket.pathfinder.service` +- `$ systemctl restart websocket.pathfinder.service` +- `$ systemctl stop websocket.pathfinder.service` + +#### Auto-Restart the Service +You can automatically restart your service (e.g. on _EVE-Online_ downtime). Create a new "timer" for the automatic restart. +1. `$ cd /etc/systemd/system` (same dir as before) +2. `$ vi restart.websocket.pathfinder.timer` +3. Copy script: + +``` +[Unit] +Description = Restart timer (EVE downtime) for WebSocket server [LIVE] + +[Timer] +OnCalendar = *-*-* 12:01:00 +Persistent = true + +[Install] +WantedBy = timer.target +``` +Now we need a new "restart service" for the timer: +1. `$ cd /etc/systemd/system` (same dir as before) +2. `$ vi restart.websocket.pathfinder.service` +3. Copy script: + +``` +[Unit] +Description = Restart (periodically) WebSocket server [LIVE] + +[Service] +Type = oneshot +ExecStart = /usr/bin/systemctl try-restart websocket.pathfinder.service +``` + +### Info - [*Ratchet*](http://socketo.me/) - "WebSockets for PHP"