kislayphp / eventbus
High-performance C++ PHP extension providing realtime event protocol-compatible realtime communication for PHP microservices
Package info
Language:Shell
Type:php-ext
Ext name:ext-kislayphp_eventbus
pkg:composer/kislayphp/eventbus
0.0.3
2026-03-14 16:46 UTC
Requires
- php: >=8.2
Suggests
- kislayphp/config: Dynamic configuration management
- kislayphp/core: HTTP/HTTPS server foundation
- kislayphp/discovery: Service discovery integration
- kislayphp/gateway: API gateway with real-time features
- kislayphp/metrics: Real-time metrics monitoring
- kislayphp/queue: Message queuing integration
Provides
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\ServerorKislay\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): boolemit(string $event, mixed $data): boolpublish(string $event, mixed $data): boolsend(string $event, mixed $data): boolemitTo(string $room, string $event, mixed $data): boollisten(string $host, int $port, string $path): boolclientCount(): introomCount(string $room): intonAuth(callable $handler): boolonWithAck(string $event, callable $handler): boolgetClients(): arraysetMaxPayload(int $bytes): boolnamespace(string $ns): Kislay\EventBus\Namespace
Kislay\EventBus\Socket
id(): stringjoin(string $room): boolleave(string $room): boolemit(string $event, mixed $data): boolpublish(string $event, mixed $data): boolsend(string $event, mixed $data): boolreply(string $event, mixed $data): boolemitTo(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
- Socket docs: https://skelves.com/kislayphp/docs/socket
- EventBus compatibility docs: https://skelves.com/kislayphp/docs/eventbus
- Ecosystem docs: https://skelves.com/kislayphp/docs