hannesvdvreken / socketio
将 Socket.io 消息推送到 Redis 以供 socket.io 的 Redis socket 管理器使用。
Requires
- php: >=5.4.0
- hannesvdvreken/msgpack: dev-master
- predis/predis: ~1.0
Suggests
- ext-msgpack: Allows faster msgpack serialization and deserialization.
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
类,例如 emit
、in
、to
、of
和 adapter
。
用法
首先,我们可以创建一个 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);
其中 in
是 to
的别名。您可以通过链式调用 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_pack
和 msgpack_unpack
方法,这些方法应该是最快的。
如果没有,您可以将 Msgpack\Encoder
和 Msgpack\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 编码标准,并在沟通中保持友好。