Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.

Commit 4e9b376

Browse files
authored
Merge pull request #283 from swooletw/develop
Develop
2 parents 277d4a4 + 7368e9d commit 4e9b376

12 files changed

+249
-222
lines changed

src/Commands/HttpServerCommand.php

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,6 @@ class HttpServerCommand extends Command
6060
*/
6161
protected $config;
6262

63-
/**
64-
* A manager to handle pid about the application.
65-
*
66-
* @var PidManager
67-
*/
68-
protected $pidManager;
69-
70-
/**
71-
* Create a an new HttpServerCommand instance.
72-
*
73-
* @param PidManager $pidManager
74-
*/
75-
public function __construct(PidManager $pidManager)
76-
{
77-
parent::__construct();
78-
79-
$this->pidManager = $pidManager;
80-
}
81-
8263
/**
8364
* Execute the console command.
8465
*
@@ -170,7 +151,7 @@ protected function stop()
170151

171152
// I don't known why Swoole didn't trigger "onShutdown" after sending SIGTERM.
172153
// So we should manually remove the pid file.
173-
$this->pidManager->delete();
154+
$this->laravel->make(PidManager::class)->delete();
174155

175156
$this->info('> success');
176157
}
@@ -229,7 +210,10 @@ protected function showInfos()
229210
$workerNum = Arr::get($this->config, 'server.options.worker_num');
230211
$taskWorkerNum = Arr::get($this->config, 'server.options.task_worker_num');
231212
$isWebsocket = Arr::get($this->config, 'websocket.enabled');
213+
$hasTaskWorker = $isWebsocket || Arr::get($this->config, 'queue.default') === 'swoole';
232214
$logFile = Arr::get($this->config, 'server.options.log_file');
215+
$pidManager = $this->laravel->make(PidManager::class);
216+
[$masterPid, $managerPid] = $pidManager->read();
233217

234218
$table = [
235219
['PHP Version', 'Version' => phpversion()],
@@ -240,9 +224,10 @@ protected function showInfos()
240224
['Server Status', $isRunning ? 'Online' : 'Offline'],
241225
['Reactor Num', $reactorNum],
242226
['Worker Num', $workerNum],
243-
['Task Worker Num', $isWebsocket ? $taskWorkerNum : 0],
227+
['Task Worker Num', $hasTaskWorker ? $taskWorkerNum : 0],
244228
['Websocket Mode', $isWebsocket ? 'On' : 'Off'],
245-
['PID', $isRunning ? implode(', ', $this->pidManager->read()) : 'None'],
229+
['Master PID', $isRunning ? $masterPid : 'None'],
230+
['Manager PID', $isRunning && $managerPid ? $managerPid : 'None'],
246231
['Log Path', $logFile],
247232
];
248233

@@ -294,9 +279,9 @@ protected function getHotReloadProcess($server)
294279
*/
295280
public function isRunning()
296281
{
297-
$pids = $this->pidManager->read();
282+
$pids = $this->laravel->make(PidManager::class)->read();
298283

299-
if ([] === $pids) {
284+
if (! count($pids)) {
300285
return false;
301286
}
302287

@@ -322,7 +307,7 @@ public function isRunning()
322307
protected function killProcess($sig, $wait = 0)
323308
{
324309
Process::kill(
325-
Arr::first($this->pidManager->read()),
310+
Arr::first($this->laravel->make(PidManager::class)->read()),
326311
$sig
327312
);
328313

src/Concerns/InteractsWithWebsocket.php

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ trait InteractsWithWebsocket
4040
*/
4141
protected $payloadParser;
4242

43+
/**
44+
* @var SwooleTW\Http\Websocket\Rooms\RoomContract
45+
*/
46+
protected $websocketRoom;
47+
4348
/**
4449
* Websocket server events.
4550
*
@@ -217,6 +222,7 @@ protected function prepareWebsocket()
217222
if ($isWebsocket) {
218223
$this->events = array_merge($this->events ?? [], $this->wsEvents);
219224
$this->isServerWebsocket = true;
225+
$this->prepareWebsocketRoom();
220226
$this->setPayloadParser(new $parser);
221227
}
222228
}
@@ -250,6 +256,20 @@ protected function prepareWebsocketHandler()
250256
$this->setWebsocketHandler($this->app->make($handlerClass));
251257
}
252258

259+
/**
260+
* Prepare websocket room.
261+
*/
262+
protected function prepareWebsocketRoom()
263+
{
264+
$config = $this->container->make('config');
265+
$driver = $config->get('swoole_websocket.default');
266+
$websocketConfig = $config->get("swoole_websocket.settings.{$driver}");
267+
$className = $config->get("swoole_websocket.drivers.{$driver}");
268+
269+
$this->websocketRoom = new $className($websocketConfig);
270+
$this->websocketRoom->prepare();
271+
}
272+
253273
/**
254274
* Set websocket handler.
255275
*
@@ -290,17 +310,8 @@ protected function createRoom(string $class, array $settings): RoomContract
290310
*/
291311
protected function bindRoom(): void
292312
{
293-
$this->app->singleton(RoomContract::class, function (Container $container) {
294-
$config = $container->make('config');
295-
$driver = $config->get('swoole_websocket.default');
296-
$settings = $config->get("swoole_websocket.settings.{$driver}");
297-
$className = $config->get("swoole_websocket.drivers.{$driver}");
298-
299-
// create room instance and initialize
300-
$room = $this->createRoom($className, $settings);
301-
$room->prepare();
302-
303-
return $room;
313+
$this->app->singleton(RoomContract::class, function (Container $app) {
314+
return $this->websocketRoom;
304315
});
305316

306317
$this->app->alias(RoomContract::class, 'swoole.room');

src/HttpServiceProvider.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@
22

33
namespace SwooleTW\Http;
44

5-
use Illuminate\Database\DatabaseManager;
6-
use Illuminate\Queue\QueueManager;
7-
use Illuminate\Support\ServiceProvider;
8-
use SwooleTW\Http\Commands\HttpServerCommand;
9-
use SwooleTW\Http\Coroutine\Connectors\ConnectorFactory;
10-
use SwooleTW\Http\Coroutine\MySqlConnection;
115
use SwooleTW\Http\Helpers\FW;
12-
use SwooleTW\Http\Server\Facades\Server;
6+
use Illuminate\Queue\QueueManager;
137
use SwooleTW\Http\Server\PidManager;
14-
use SwooleTW\Http\Server\PidManagerFactory;
15-
use SwooleTW\Http\Task\Connectors\SwooleTaskConnector;
168
use Swoole\Http\Server as HttpServer;
9+
use Illuminate\Support\ServiceProvider;
10+
use Illuminate\Database\DatabaseManager;
11+
use SwooleTW\Http\Server\Facades\Server;
12+
use SwooleTW\Http\Coroutine\MySqlConnection;
13+
use SwooleTW\Http\Commands\HttpServerCommand;
1714
use Swoole\Websocket\Server as WebsocketServer;
15+
use SwooleTW\Http\Task\Connectors\SwooleTaskConnector;
16+
use SwooleTW\Http\Coroutine\Connectors\ConnectorFactory;
1817

1918
/**
2019
* @codeCoverageIgnore
@@ -45,12 +44,12 @@ abstract class HttpServiceProvider extends ServiceProvider
4544
*/
4645
public function register()
4746
{
48-
$this->registerPidManager();
4947
$this->mergeConfigs();
5048
$this->setIsWebsocket();
5149
$this->registerServer();
5250
$this->registerManager();
5351
$this->registerCommands();
52+
$this->registerPidManager();
5453
$this->registerDatabaseDriver();
5554
$this->registerSwooleQueueDriver();
5655
}
@@ -117,7 +116,9 @@ protected function mergeConfigs()
117116
protected function registerPidManager(): void
118117
{
119118
$this->app->singleton(PidManager::class, function() {
120-
return call_user_func(new PidManagerFactory, $this->app);
119+
return new PidManager(
120+
$this->app->make('config')->get('swoole_http.server.options.pid_file')
121+
);
121122
});
122123
}
123124

@@ -150,7 +151,7 @@ protected function createSwooleServer()
150151
$host = $config->get('swoole_http.server.host');
151152
$port = $config->get('swoole_http.server.port');
152153
$socketType = $config->get('swoole_http.server.socket_type', SWOOLE_SOCK_TCP);
153-
$processType = $config->get('swoole.http.server.process_type', SWOOLE_PROCESS);
154+
$processType = $config->get('swoole_http.server.process_type', SWOOLE_PROCESS);
154155

155156
static::$server = new $server($host, $port, $processType, $socketType);
156157
}

src/LaravelServiceProvider.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
namespace SwooleTW\Http;
44

5+
use SwooleTW\Http\Server\Manager;
56
use Illuminate\Contracts\Http\Kernel;
67
use SwooleTW\Http\Middleware\AccessLog;
7-
use SwooleTW\Http\Server\Manager;
8-
use SwooleTW\Http\Server\PidManager;
98

109
/**
1110
* @codeCoverageIgnore
@@ -20,7 +19,7 @@ class LaravelServiceProvider extends HttpServiceProvider
2019
protected function registerManager()
2120
{
2221
$this->app->singleton(Manager::class, function ($app) {
23-
return new Manager($app, 'laravel', base_path(), $this->app[PidManager::class]);
22+
return new Manager($app, 'laravel');
2423
});
2524

2625
$this->app->alias(Manager::class, 'swoole.manager');

src/LumenServiceProvider.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
namespace SwooleTW\Http;
44

5-
use SwooleTW\Http\Middleware\AccessLog;
65
use SwooleTW\Http\Server\Manager;
7-
use SwooleTW\Http\Server\PidManager;
6+
use SwooleTW\Http\Middleware\AccessLog;
87

98
/**
109
* @codeCoverageIgnore
@@ -19,7 +18,7 @@ class LumenServiceProvider extends HttpServiceProvider
1918
protected function registerManager()
2019
{
2120
$this->app->singleton(Manager::class, function ($app) {
22-
return new Manager($app, 'lumen', base_path(), $this->app[PidManager::class]);
21+
return new Manager($app, 'lumen');
2322
});
2423

2524
$this->app->alias(Manager::class, 'swoole.manager');

src/Server/Manager.php

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Support\Str;
1010
use SwooleTW\Http\Helpers\OS;
1111
use SwooleTW\Http\Server\Sandbox;
12+
use SwooleTW\Http\Server\PidManager;
1213
use SwooleTW\Http\Task\SwooleTaskJob;
1314
use Illuminate\Support\Facades\Facade;
1415
use SwooleTW\Http\Websocket\Websocket;
@@ -41,13 +42,6 @@ class Manager
4142
*/
4243
protected $container;
4344

44-
/**
45-
* A manager to handle pid about the application.
46-
*
47-
* @var PidManager
48-
*/
49-
protected $pidManager;
50-
5145
/**
5246
* @var string
5347
*/
@@ -89,12 +83,11 @@ class Manager
8983
*
9084
* @throws \Exception
9185
*/
92-
public function __construct(Container $container, $framework, $basePath = null, PidManager $pidManager)
86+
public function __construct(Container $container, $framework, $basePath = null)
9387
{
9488
$this->container = $container;
9589
$this->setFramework($framework);
9690
$this->setBasepath($basePath);
97-
$this->pidManager = $pidManager;
9891
$this->initialize();
9992
}
10093

@@ -147,8 +140,7 @@ public function onStart()
147140
$this->setProcessName('master process');
148141

149142
$server = $this->container->make(Server::class);
150-
151-
$this->pidManager->write($server->master_pid, $server->manager_pid ?? 0);
143+
$this->container->make(PidManager::class)->write($server->master_pid, $server->manager_pid ?? 0);
152144

153145
$this->container->make('events')->dispatch('swoole.start', func_get_args());
154146
}
@@ -310,7 +302,7 @@ public function onFinish($server, $taskId, $data)
310302
*/
311303
public function onShutdown()
312304
{
313-
$this->pidManager->delete();
305+
$this->container->make(PidManager::class)->delete();
314306
}
315307

316308
/**

0 commit comments

Comments
 (0)