hannesvdvreken/socketio

此包已被弃用,不再维护。未建议替代包。

将 Socket.io 消息推送到 Redis 以供 socket.io 的 Redis socket 管理器使用。

1.0.0-alpha.1 2014-12-26 20:28 UTC

This package is auto-updated.

Last update: 2020-07-18 00:54:33 UTC


README

它做什么?

此包允许您通过 Redis 将 socket 消息传输到 Node.js 进程。Socket.io 有一个 redis 适配器,允许扩展 Node.js 集群以将 socket 消息发送到连接到任何进程的任何客户端。我们可以用这个来直接从 PHP 发送消息。

此包提供了一个具有类似于 Node.js 中 socket.io 服务器方法的 Socketio\Socketio 类,例如 emitintoofadapter

用法

首先,我们可以创建一个 Socketio\Socketio 对象。

$io = new Socketio\Socketio;

它具有一些与 Node.js 中相同的方法

命名空间

$chats = $io->of('/chats');

$io->emit('general', $message);
$chats->emit('user.connected', $user);

设置具有不同命名空间的服务器对象。$io 对象保持相同的命名空间。或者使用回调

$io->of('/chats', function ($chats) {
    $chats->emit('user.connected', $user);
});

$io->emit('general', $message);

房间

发送到特定的房间(s)

$io->to('room-a')->emit('event', $message);
$io->to('room-a')->to('room-b')->emit('event', $message);
$io->in('room-c')->emit('event', $message);

其中 into 的别名。您可以通过链式调用 to 调用同时将消息发送到多个房间。在每次 emit 调用后都会重置房间。这与 Node.js 中的行为类似。

适配器

默认情况下,Socketio\Socketio 对象配置了一个 Memory 适配器。此适配器模拟 socket 消息交付,可用于测试/存根。

要设置 Redis 适配器,您需要首先配置一些依赖项。

$predis = new Predis\Client;
$msgpack = new Socketio\Utils\Msgpack;

$adapter = new Socketio\Adapters\Redis($predis, $msgpack);
$io->adapter($adapter);

如果您已安装 ext-msgpack,Socketio\Utils\Msgpack 将使用原生的 msgpack_packmsgpack_unpack 方法,这些方法应该是最快的。

如果没有,您可以将 Msgpack\EncoderMsgpack\Decoder 对象传递给它以进行编码/解码。如果您需要此包,这些对象与 composer 预先安装。

$msgpack = new Socketio\Utils\Msgpack(new Msgpack\Encoder, new Msgpack\Decoder);

Node.js 进程

var app = require('express')();
var socketio = require('socket.io');
var adapter = require('socket.io-redis');

var server = app.listen(process.env.NODE_PORT || 9000);

io = socketio(server);
io.adapter(adapter());

现在,您可以开始了!

贡献

坚持 PSR-2 编码标准,并在沟通中保持友好。

许可

MIT