kislayphp/eventbus

High-performance C++ PHP extension providing realtime event protocol-compatible realtime communication for PHP microservices

Maintainers

Package info

github.com/KislayPHP/eventbus

Documentation

Language:Shell

Type:php-ext

Ext name:ext-kislayphp_eventbus

pkg:composer/kislayphp/eventbus

Statistics

Installs: 12

Dependents: 0

Suggesters: 6

Stars: 0

Open Issues: 0

0.0.3 2026-03-14 16:46 UTC

This package is auto-updated.

Last update: 2026-03-18 18:23:48 UTC


README

Compatibility transport package for the older Kislay realtime transport name.

kislayphp/eventbus remains published on the 0.0.x line so existing transport installs can continue to work. New transport work should start on kislayphp/socket.

Current Role

Use eventbus only when:

  • an existing service is already pinned to kislayphp/eventbus:0.0.3
  • existing code already imports Kislay\EventBus\Server or Kislay\EventBus\Socket
  • you want the lowest-risk migration path before moving code to Kislay\Socket\...

Use socket for new installs when you need:

  • realtime browser or service socket connections
  • Engine.IO polling and WebSocket upgrade
  • rooms and namespaces
  • per-client replies and room fanout

Installation

Compatibility install

pie install kislayphp/eventbus:0.0.3

Enable it in php.ini:

extension=kislayphp_eventbus.so

Forward install for new transport work

pie install kislayphp/socket:0.0.1

Minimal Compatibility Example

<?php

$server = new Kislay\EventBus\Server();

$server->on('connection', function (Kislay\EventBus\Socket $socket) {
    $socket->join('general');
    $socket->reply('connected', ['id' => $socket->id()]);
});

$server->on('chat', function (Kislay\EventBus\Socket $socket, array $payload) {
    $socket->emitTo('general', 'chat', [
        'from' => $socket->id(),
        'message' => $payload['message'] ?? '',
    ]);
});

$server->listen('0.0.0.0', 3000, '/socket.io/');

Public API

Kislay\EventBus\Server

  • on(string $event, callable $handler): bool
  • emit(string $event, mixed $data): bool
  • publish(string $event, mixed $data): bool
  • send(string $event, mixed $data): bool
  • emitTo(string $room, string $event, mixed $data): bool
  • listen(string $host, int $port, string $path): bool
  • clientCount(): int
  • roomCount(string $room): int
  • onAuth(callable $handler): bool
  • onWithAck(string $event, callable $handler): bool
  • getClients(): array
  • setMaxPayload(int $bytes): bool
  • namespace(string $ns): Kislay\EventBus\Namespace

Kislay\EventBus\Socket

  • id(): string
  • join(string $room): bool
  • leave(string $room): bool
  • emit(string $event, mixed $data): bool
  • publish(string $event, mixed $data): bool
  • send(string $event, mixed $data): bool
  • reply(string $event, mixed $data): bool
  • emitTo(string $room, string $event, mixed $data): bool

Semantics:

  • Server::emit() broadcasts to all connected clients.
  • Socket::emit() sends only to the current client.
  • Socket::reply() is the semantic alias for per-client emit.
  • Socket::emitTo() broadcasts to a room.

Legacy aliases under KislayPHP\EventBus\... remain available.

Positioning

Use eventbus only as the compatibility package during the 0.0.x transport split.

Use queue for:

  • background jobs
  • retries and DLQ
  • worker/server queue processing

Use socket for:

  • new realtime transport work
  • rooms and namespaces
  • polling and WebSocket upgrade
  • transport-facing docs and onboarding

Documentation