Releases: socketio/socket.io-redis-adapter
8.3.0
8.2.1
Bug Fixes
- sharded: ensure compatibility with ioredis (42c8ab6)
- sharded: properly unsubscribe when closing (2da8d9e)
Diff: 8.2.0...8.2.1
8.2.0
Bug Fixes
Features
Sharded Pub/Sub
Sharded Pub/Sub was introduced in Redis 7.0 in order to help scaling the usage of Pub/Sub in cluster mode.
Reference: https://redis.io/docs/manual/pubsub/#sharded-pubsub
A dedicated adapter can be created with the createShardedAdapter()
method:
import { Server } from 'socket.io';
import { createClient } from 'redis';
import { createShardedAdapter } from '@socket.io/redis-adapter';
const pubClient = createClient({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();
await Promise.all([
pubClient.connect(),
subClient.connect()
]);
const io = new Server({
adapter: createShardedAdapter(pubClient, subClient)
});
io.listen(3000);
Minimum requirements:
- Redis 7.0
redis@4.6.0
Added in e70b1bd.
Support for node-redis cluster
The redis
package now supports Redis cluster.
Added in 77ef42c.
Subscription modes
The subscriptionMode
option allows to configure how many Redis Pub/Sub channels are used:
- "static": 2 channels per namespace
Useful when used with dynamic namespaces.
- "dynamic": (2 + 1 per public room) channels per namespace
The default value, useful when some rooms have a low number of clients (so only a few Socket.IO servers are notified).
const io = new Server({
adapter: createShardedAdapter(pubClient, subClient, {
subscriptionMode: "static"
})
});
Added in d3388bf.
Credits
Huge thanks to @winchell for helping!
Diff: 8.1.0...8.2.0
8.1.0
The socket.io-adapter
package was added to the list of peerDependencies
, in order to fix sync issues with the version imported by the socket.io
package (see f07ff7b).
Features
Automatic removal of empty child namespaces
The close()
method was implemented, in order to be used with the new cleanupEmptyChildNamespaces
option.
Reference: https://github.com/socketio/socket.io/releases/tag/4.6.0
Added in fe89f7e.
Diff: 8.0.1...8.1.0
8.0.1
This release pins the socket.io-adapter
package to version ~2.4.0
instead of ^2.4.0
.
Diff: 8.0.0...8.0.1
8.0.0
Dependencies
Features
Example with msgpackr:
import { unpack, pack } from "msgpackr";
io.adapter(createAdapter(pubClient, subClient, {
parser: {
encode(val) {
return pack(val);
},
decode(val) {
return unpack(val);
}
}
}));
- remove deprecated methods (fb760d9)
BREAKING CHANGES
- the remoteJoin(), remoteLeave(), remoteDisconnect() and sockets() methods are removed in favor of the official alternatives
Related: socketio/socket.io@b25495c
- the format of Date objects is modified in a non backward-compatible way, as notepack.io now implements the MessagePack Timestamp extension type.
Reference: https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type
Previous versions of the adapter will not be able to parse the Date objects sent by newer versions.
- Reference: https://github.com/darrachequesne/notepack/releases/tag/3.0.0
- Diff: darrachequesne/notepack@2.3.0...3.0.1
Diff: 7.2.0...8.0.0
7.2.0
Bug Fixes
Features
- broadcast and expect multiple acks (e4c40cc)
This feature was added in socket.io@4.5.0
:
io.timeout(1000).emit("some-event", (err, responses) => {
// ...
});
Thanks to this change, it will now work with multiple Socket.IO servers.
Diff: 7.1.0...7.2.0
7.1.0
Features
Error handling can now be done on the redis clients directly.
Before:
io.of("/").adapter.on("error", () => {
// ...
});
After:
pubClient.on("error", () => {
// something went wrong
});
subClient.on("error", () => {
// something went wrong
});
- send response to the requesting node only (f66de11)
A more performant way to do request-response is available behind an option, publishOnSpecificResponseChannel
:
const io = require('socket.io')(3000);
const { createClient } = require('redis');
const redisAdapter = require('@socket.io/redis-adapter');
const pubClient = createClient({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();
io.adapter(redisAdapter(pubClient, subClient, {
publishOnSpecificResponseChannel: true
}));
To upgrade an existing deployment, you will need to upgrade all nodes to the latest version with publishOnSpecificResponseChannel = false, and then toggle the option on each node.
Please check the commit for more information.
Links
- Diff: 7.0.1...7.1.0
7.0.1
7.0.0
The package was renamed to @socket.io/redis-adapter
, in order to match the name of the Redis emitter (@socket.io/redis-emitter
).
Features
- implement the serverSideEmit functionality (3a0f29f)
- remove direct redis dependency (c68a47c)
- rename the package to
@socket.io/redis-adapter
(3cac178)
BREAKING CHANGES
- the library will no longer create Redis clients on behalf of the user.
Before:
io.adapter(redisAdapter({ host: "localhost", port: 6379 }));
After:
const pubClient = createClient({ host: "localhost", port: 6379 });
const subClient = pubClient.duplicate();
io.adapter(redisAdapter(pubClient, subClient));
Links
- Diff: 6.1.0...7.0.0