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

Commit 5e9e768

Browse files
authored
Merge pull request #319 from mxp100/bugfix/websocket-in-tasks
fixes for working with websocket in jobs
2 parents d529bb3 + 18b2023 commit 5e9e768

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

src/Server/Manager.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,18 @@ protected function initialize()
122122
*/
123123
protected function setSwooleServerListeners()
124124
{
125+
$server = $this->container->make(Server::class);
126+
if ($server->taskworker){
127+
return;
128+
}
129+
125130
foreach ($this->events as $event) {
126131
$listener = Str::camel("on_$event");
127132
$callback = method_exists($this, $listener) ? [$this, $listener] : function () use ($event) {
128133
$this->container->make('events')->dispatch("swoole.$event", func_get_args());
129134
};
130135

131-
$this->container->make(Server::class)->on($event, $callback);
136+
$server->on($event, $callback);
132137
}
133138
}
134139

@@ -170,11 +175,8 @@ public function onWorkerStart($server)
170175

171176
$this->container->make('events')->dispatch('swoole.workerStart', func_get_args());
172177

173-
// don't init laravel app in task workers
174178
if ($server->taskworker) {
175179
$this->setProcessName('task process');
176-
177-
return;
178180
}
179181
$this->setProcessName('worker process');
180182

src/Websocket/Websocket.php

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Support\Facades\Config;
99
use InvalidArgumentException;
1010
use SwooleTW\Http\Server\Facades\Server;
11+
use SwooleTW\Http\Server\Manager;
1112
use SwooleTW\Http\Websocket\Rooms\RoomContract;
1213

1314
/**
@@ -172,17 +173,35 @@ public function emit(string $event, $data): bool
172173
return false;
173174
}
174175

175-
$result = App::make(Server::class)->task([
176-
'action' => static::PUSH_ACTION,
177-
'data' => [
178-
'sender' => $this->sender,
179-
'fds' => $fds,
176+
/** @var Server $server */
177+
$server = App::make(Server::class);
178+
179+
if (!empty($server->taskworker)) {
180+
/** @var Manager $manager */
181+
$manager = App::make(Manager::class);
182+
$manager->pushMessage($server, [
183+
'sender' => $this->sender,
184+
'fds' => $fds,
180185
'broadcast' => $this->isBroadcast,
181-
'assigned' => $assigned,
182-
'event' => $event,
183-
'message' => $data,
184-
],
185-
]);
186+
'assigned' => $assigned,
187+
'event' => $event,
188+
'message' => $data,
189+
]);
190+
191+
$result = true;
192+
} else {
193+
$result = $server->task([
194+
'action' => static::PUSH_ACTION,
195+
'data' => [
196+
'sender' => $this->sender,
197+
'fds' => $fds,
198+
'broadcast' => $this->isBroadcast,
199+
'assigned' => $assigned,
200+
'event' => $event,
201+
'message' => $data,
202+
],
203+
]);
204+
}
186205

187206
$this->reset();
188207

tests/Server/ManagerTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ public function testOnTaskWorkerStart()
178178
return $this->getEvent('swoole.workerStart');
179179
});
180180

181-
$manager = $this->getManager($container);
181+
$path = __DIR__ . '/../fixtures';
182+
$manager = $this->getManager($container, $framework = 'laravel', $path);
182183

183184
$this->assertNull($manager->onWorkerStart($server));
184185
}

0 commit comments

Comments
 (0)