This package provides the artisan command ratchet:serve that will start a Ratchet Io Server,  Web Socket,  or Wamp Server with the class of your making. Included are a few functions like abort() send() and sendAll() to make some common tasks easier.
- WaServer, WampServer & IoServer
- IpBlackList
- Connection throttling
- Message throttling
Install with composer
composer require askedio/laravel-ratchet
Register the provider in config/app.php.
Askedio\LaravelRatchet\Providers\LaravelRatchetServiceProvider::class,
Install ZMQ to use the WampServer driver.
apt-get install php7.0-zmq
The default driver will create a simple Push server based on Ratchets example.
php artisan ratchet:serve
Starting WampServer server on: 0.0.0.0:8080
Starting ZMQ server on: 127.0.0.1:5555
Create your own class based on or extending RatchetServerExample.php.
Insert data to ZMQ using the example provided by Ratchet.
Use the IoServer driver and the RatchetServerExample.php class to create a simple socket server.
Here is an example you could use in your App.
<?php
namespace App;
use Ratchet\ConnectionInterface;
use Askedio\LaravelRatchet\RatchetServer;
class RatchetServer extends RatchetServer
{
    public function onMessage(ConnectionInterface $conn, $input)
    {
        parent::onMessage($conn, $input);
        if (!$this->throttled) {
            $this->send($conn, 'Hello you.');
            $this->sendAll('Hello everyone.');
            $this->send($conn, 'Wait, I don\'t know you! Bye bye!');
            $this->abort($conn);
        }
    }
}
You'll need to change the class to in your command line or config.
php artisan ratchet:serve --driver=IoServer --class="App\RatchetServer::class"
To use the default values from the configuration run the command as follows:
php artisan ratchet:serve
You can also define configuration items on the command line:
php artisan ratchet:serve  --help
Usage:
  ratchet:serve [options]
Options:
      --host[=HOST]      Ratchet server host [default: "0.0.0.0"]
  -p, --port[=PORT]      Ratchet server port [default: "9090"]
      --class[=CLASS]    Class that implements MessageComponentInterface. [default: "Askedio\LaravelRatchet\RatchetServerExample"]
      --driver[=DRIVER]  Ratchet connection driver [IoServer|WsServer|WampServer] [default: "WampServer"]
      ...
There are several configuration values that you will want to change. Publish the configuration then you can edit config/ratchet.php.
php artisan vendor:publish
- class: Your MessageComponentInterface or WampServerInterface class.
- host: The host to listen on.
- port: The port to listen on.
- connectionLimit: The total number of connections allowed (RatchetServer only).
- throttle: Throttle connections and messages.
- onOpen: limit:delay for connections.
- onMessage: limit:delay for messages.
 
- abortOnMessageThrottle: disconnect client when message throttle triggered.
- blackList: Collection or Model of the hosts to ban using IpBlackList.
Send a message to the current connection.
$this->send($conn, $message);
Send a message to all connections.
$this->sendAll($message);
Close current connection.
$this->abort($conn);
Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems.
Things crash and long running processes need to be monitored. We can use Supervisor to help with this.
sudo apt-get install supervisor
Replace /home/forge/app.com/ with the path to your application.
sudo cat <<EOF > /etc/supervisor/conf.d/laravel-ratchet.conf
[program:laravel-ratchet]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan ratchet:serve -q
autostart=true
autorestart=true
user=vagrant
numprocs=1
redirect_stderr=true
stdout_logfile=/home/forge/app.com/ratchet.log
EOF
sudo supervisorctl reread
sudo supervisorctl update
supervisorctl start laravel-ratchet:*
See contributing.
Write some tests, that'd be swell.
