oleh-ozimok / php-centrifugo
Centrifugo 实时消息服务器 PHP 客户端
v2.0.0
2018-04-04 09:30 UTC
Requires
- php: >=5.4.0
- ext-curl: *
Requires (Dev)
- predis/predis: ^1.1
Suggests
- predis/predis: Enable Predis support
This package is not auto-updated.
Last update: 2024-09-14 18:09:49 UTC
README
Centrifugo 实时消息服务器 PHP 客户端
特性
- 支持通过 Redis 引擎 API 监听器发布消息(仅支持发布、广播、取消订阅、断开连接方法)
- 支持客户端链(Redis -> HTTP -> ...)作为故障转移。如果 Redis 服务器宕机或 Redis 引擎 API 不支持该方法,客户端将尝试通过 HTTP 发送消息
- 支持批量请求
- 支持 Predis
快速示例
创建 Centrifugo 客户端
<?php use Centrifugo\Centrifugo; use Centrifugo\Clients\HttpClient; $centrifugo = new Centrifugo('http://example.com/api/', 'secret api key', new HttpClient());
创建支持 Redis API 的 Centrifugo 客户端
<?php use Centrifugo\Centrifugo; use Centrifugo\Clients\RedisClient; use Centrifugo\Clients\HttpClient; use Centrifugo\Clients\Redis\RedisTransport; use Centrifugo\Clients\Redis\PredisTransport; // Create Redis transport $redis = new \Redis(); $redis->connect('localhost'); $redisTransport = new RedisTransport($redis); // Or Predis transport $predis = new Predis\Client(['host' => 'localhost']); $redisTransport = new PredisTransport($predis); // Create Centrifugo RedisClient $centrifugoRedisClient = new RedisClient($redisTransport); $centrifugoRedisClient->setShardsNumber(12); // Add Centrifugo HttpClient as failover $centrifugoHttpClient = new HttpClient(); $centrifugoRedisClient->setFailover($centrifugoHttpClient); $centrifugo = new Centrifugo('http://example.com/api/', 'secret api key', $centrifugoRedisClient);
向 Centrifugo 发送请求
<?php use Centrifugo\Centrifugo; use Centrifugo\Exceptions\CentrifugoException; $userId = 1; $channel = '#chan_1'; $messageData = ['message' => 'Hello, world!']; try { //Send message into channel. $response = $centrifugo->publish($channel, $messageData); //Very similar to publish but allows to send the same data into many channels. $response = $centrifugo->broadcast([$channel], $messageData); //Unsubscribe user from channel. $response = $centrifugo->unsubscribe($channel, $userId); //Disconnect user by user ID. $response = $centrifugo->disconnect($userId); //Get channel presence information (all clients currently subscribed on this channel). $response = $centrifugo->presence($channel); //Get channel history information (list of last messages sent into channel). $response = $centrifugo->history($channel); //Get channels information (list of currently active channels). $response = $centrifugo->channels(); //Get stats information about running server nodes. $response = $centrifugo->stats(); //Get information about single Centrifugo node. $response = $centrifugo->node('http://node1.example.com/api/'); } catch (CentrifugoException $e) { // invalid response }
发送批量请求
<?php use Centrifugo\Centrifugo; use Centrifugo\Exceptions\CentrifugoException; $userId = '1'; //must be a string $channel = '#chan_1'; $messageData = ['message' => 'Hello, world!']; try { $requests[] = $centrifugo->request('publish', ['channel' => $channel, 'data' => $messageData]); $requests[] = $centrifugo->request('broadcast', ['channel' => $channel, 'data' => $messageData]); $requests[] = $centrifugo->request('unsubscribe', ['channel' => $channel, 'user' => $userId]); $requests[] = $centrifugo->request('disconnect', ['user' => $userId]); $batchResponse = $centrifugo->sendBatchRequest($requests); foreach ($batchResponse as $response) { if ($response->isError()) { // get error info $error = $response->getError(); } else { // get response data as array $responseData = $response->getDecodedBody(); } } } catch (CentrifugoException $e) { // invalid response }
相关项目
centrifugo-bundle(开发中)