IBF broadcasting socket

This commit is contained in:
Fabian @ Blax Software 2026-02-03 16:30:59 +01:00
parent 0f54c414a2
commit cc78a9b4d5
2 changed files with 26 additions and 1 deletions

View File

@ -30,6 +30,8 @@ class BroadcastSocketServer
protected string $socketPath; protected string $socketPath;
protected string $appId;
/** /**
* Active client connections * Active client connections
* @var ConnectionInterface[] * @var ConnectionInterface[]
@ -41,6 +43,7 @@ class BroadcastSocketServer
$this->loop = $loop; $this->loop = $loop;
$this->channelManager = $channelManager; $this->channelManager = $channelManager;
$this->socketPath = config('websockets.broadcast_socket', '/tmp/laravel-websockets-broadcast.sock'); $this->socketPath = config('websockets.broadcast_socket', '/tmp/laravel-websockets-broadcast.sock');
$this->appId = config('websockets.apps.0.id', 'websocket');
} }
/** /**
@ -122,13 +125,26 @@ class BroadcastSocketServer
$sockets = $payload['sockets'] ?? null; // Target specific sockets $sockets = $payload['sockets'] ?? null; // Target specific sockets
$excludeSockets = $payload['exclude_sockets'] ?? []; // Exclude specific sockets $excludeSockets = $payload['exclude_sockets'] ?? []; // Exclude specific sockets
Log::info('[BroadcastSocket] Received broadcast request', [
'event' => $event,
'channel' => $channel,
'appId' => $this->appId,
'target_sockets' => $sockets ? count($sockets) : 'all',
]);
// Get channel instance and broadcast // Get channel instance and broadcast
$channelInstance = $this->channelManager->find('websockets', $channel); $channelInstance = $this->channelManager->find($this->appId, $channel);
if ($channelInstance) { if ($channelInstance) {
$connectionCount = count($channelInstance->getConnections());
Log::info('[BroadcastSocket] Found channel with connections', [
'channel' => $channel,
'connections' => $connectionCount,
]);
$this->broadcastToChannel($channelInstance, $event, $data, $sockets, $excludeSockets); $this->broadcastToChannel($channelInstance, $event, $data, $sockets, $excludeSockets);
$connection->write(json_encode(['success' => true]) . "\n"); $connection->write(json_encode(['success' => true]) . "\n");
} else { } else {
Log::info('[BroadcastSocket] Channel not found or no subscribers', ['channel' => $channel]);
// Channel doesn't exist or no subscribers - still success // Channel doesn't exist or no subscribers - still success
$connection->write(json_encode(['success' => true, 'warning' => 'No channel subscribers']) . "\n"); $connection->write(json_encode(['success' => true, 'warning' => 'No channel subscribers']) . "\n");
} }

View File

@ -34,6 +34,12 @@ class WebsocketService
$innerChannel = $data['channel'] ?? $channel ?? 'websocket'; $innerChannel = $data['channel'] ?? $channel ?? 'websocket';
$targetSockets = $data['sockets'] ?? null; $targetSockets = $data['sockets'] ?? null;
\Log::info('[WebsocketService] Sending via broadcast socket (app.whisp)', [
'innerEvent' => $innerEvent,
'innerChannel' => $innerChannel,
'targetSockets' => $targetSockets ? count($targetSockets) : 'all',
]);
if (!empty($targetSockets) && is_array($targetSockets)) { if (!empty($targetSockets) && is_array($targetSockets)) {
// Whisper to specific sockets // Whisper to specific sockets
$success = ws_whisper($innerEvent, $innerData, $targetSockets, $innerChannel); $success = ws_whisper($innerEvent, $innerData, $targetSockets, $innerChannel);
@ -45,6 +51,7 @@ class WebsocketService
if ($success) { if ($success) {
return (object)['success' => true, 'method' => 'broadcast_socket']; return (object)['success' => true, 'method' => 'broadcast_socket'];
} }
\Log::warning('[WebsocketService] Broadcast socket failed, falling back to WebSocket');
// Fall through to WebSocket client if broadcast socket fails // Fall through to WebSocket client if broadcast socket fails
} else { } else {
// Regular broadcast // Regular broadcast
@ -54,6 +61,8 @@ class WebsocketService
} }
// Fall through to WebSocket client if broadcast socket fails // Fall through to WebSocket client if broadcast socket fails
} }
} else {
\Log::info('[WebsocketService] Broadcast socket not available, using WebSocket fallback');
} }
// Fallback: Create new WebSocket connection (slower, for when broadcast socket not available) // Fallback: Create new WebSocket connection (slower, for when broadcast socket not available)