Merge pull request #284 from zaxxo/master
[feature] Add restart command for WebSocket server
This commit is contained in:
commit
d11daad638
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\LaravelWebSockets\Console;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\InteractsWithTime;
|
||||||
|
|
||||||
|
class RestartWebSocketServer extends Command
|
||||||
|
{
|
||||||
|
use InteractsWithTime;
|
||||||
|
|
||||||
|
protected $signature = 'websockets:restart';
|
||||||
|
|
||||||
|
protected $description = 'Restart the Laravel WebSocket Server';
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
Cache::forever('beyondcode:websockets:restart', $this->currentTime());
|
||||||
|
|
||||||
|
$this->info('Broadcasting WebSocket server restart signal.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ use BeyondCode\LaravelWebSockets\Statistics\Logger\StatisticsLogger as Statistic
|
||||||
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
use BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManager;
|
||||||
use Clue\React\Buzz\Browser;
|
use Clue\React\Buzz\Browser;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
use React\Dns\Config\Config as DnsConfig;
|
use React\Dns\Config\Config as DnsConfig;
|
||||||
use React\Dns\Resolver\Factory as DnsFactory;
|
use React\Dns\Resolver\Factory as DnsFactory;
|
||||||
use React\Dns\Resolver\ResolverInterface;
|
use React\Dns\Resolver\ResolverInterface;
|
||||||
|
|
@ -28,6 +29,9 @@ class StartWebSocketServer extends Command
|
||||||
/** @var \React\EventLoop\LoopInterface */
|
/** @var \React\EventLoop\LoopInterface */
|
||||||
protected $loop;
|
protected $loop;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
protected $lastRestart;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
@ -42,6 +46,7 @@ class StartWebSocketServer extends Command
|
||||||
->configureHttpLogger()
|
->configureHttpLogger()
|
||||||
->configureMessageLogger()
|
->configureMessageLogger()
|
||||||
->configureConnectionLogger()
|
->configureConnectionLogger()
|
||||||
|
->configureRestartTimer()
|
||||||
->registerEchoRoutes()
|
->registerEchoRoutes()
|
||||||
->registerCustomRoutes()
|
->registerCustomRoutes()
|
||||||
->startWebSocketServer();
|
->startWebSocketServer();
|
||||||
|
|
@ -105,6 +110,19 @@ class StartWebSocketServer extends Command
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function configureRestartTimer()
|
||||||
|
{
|
||||||
|
$this->lastRestart = $this->getLastRestart();
|
||||||
|
|
||||||
|
$this->loop->addPeriodicTimer(10, function () {
|
||||||
|
if ($this->getLastRestart() !== $this->lastRestart) {
|
||||||
|
$this->loop->stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
protected function registerEchoRoutes()
|
protected function registerEchoRoutes()
|
||||||
{
|
{
|
||||||
WebSocketsRouter::echo();
|
WebSocketsRouter::echo();
|
||||||
|
|
@ -151,4 +169,9 @@ class StartWebSocketServer extends Command
|
||||||
$this->loop
|
$this->loop
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getLastRestart()
|
||||||
|
{
|
||||||
|
return Cache::get('beyondcode:websockets:restart', 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ class WebSocketsServiceProvider extends ServiceProvider
|
||||||
$this->commands([
|
$this->commands([
|
||||||
Console\StartWebSocketServer::class,
|
Console\StartWebSocketServer::class,
|
||||||
Console\CleanStatistics::class,
|
Console\CleanStatistics::class,
|
||||||
|
Console\RestartWebSocketServer::class,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\LaravelWebSockets\Tests\Commands;
|
||||||
|
|
||||||
|
use Artisan;
|
||||||
|
use BeyondCode\LaravelWebSockets\Tests\TestCase;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\InteractsWithTime;
|
||||||
|
|
||||||
|
class RestartWebSocketServerTest extends TestCase
|
||||||
|
{
|
||||||
|
use InteractsWithTime;
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_can_broadcast_restart_signal()
|
||||||
|
{
|
||||||
|
$start = $this->currentTime();
|
||||||
|
|
||||||
|
Artisan::call('websockets:restart');
|
||||||
|
|
||||||
|
$this->assertGreaterThanOrEqual($start, Cache::get('beyondcode:websockets:restart', 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue