
Security News
PEP 810 Proposes Explicit Lazy Imports for Python 3.15
An opt-in lazy import keyword aims to speed up Python startups, especially CLIs, without the ecosystem-wide risks that sank PEP 690.
@socket.io/mongo-adapter
Advanced tools
The Socket.IO MongoDB adapter, allowing to broadcast events between several Socket.IO servers
The @socket.io/mongo-adapter
package allows broadcasting packets between multiple Socket.IO servers.
Unlike the existing socket.io-adapter-mongo
package which uses tailable cursors, this package relies on change streams and thus requires a replica set or a sharded cluster.
Table of contents
Feature | socket.io version | Support |
---|---|---|
Socket management | 4.0.0 | :white_check_mark: YES (since version 0.1.0 ) |
Inter-server communication | 4.1.0 | :white_check_mark: YES (since version 0.1.0 ) |
Broadcast with acknowledgements | 4.5.0 | :white_check_mark: YES (since version 0.2.0 ) |
Connection state recovery | 4.6.0 | :white_check_mark: YES (since version 0.3.0 ) |
npm install @socket.io/mongo-adapter mongodb
Broadcasting packets within a Socket.IO cluster is achieved by creating MongoDB documents and using a change stream on each Socket.IO server.
There are two ways to clean up the documents in MongoDB:
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/mongo-adapter";
import { MongoClient } from "mongodb";
const DB = "mydb";
const COLLECTION = "socket.io-adapter-events";
const io = new Server();
const mongoClient = new MongoClient("mongodb://localhost:27017/?replicaSet=rs0");
await mongoClient.connect();
try {
await mongoClient.db(DB).createCollection(COLLECTION, {
capped: true,
size: 1e6
});
} catch (e) {
// collection already exists
}
const mongoCollection = mongoClient.db(DB).collection(COLLECTION);
io.adapter(createAdapter(mongoCollection));
io.listen(3000);
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/mongo-adapter";
import { MongoClient } from "mongodb";
const DB = "mydb";
const COLLECTION = "socket.io-adapter-events";
const io = new Server();
const mongoClient = new MongoClient("mongodb://localhost:27017/?replicaSet=rs0");
await mongoClient.connect();
const mongoCollection = mongoClient.db(DB).collection(COLLECTION);
await mongoCollection.createIndex(
{ createdAt: 1 },
{ expireAfterSeconds: 3600, background: true }
);
io.adapter(createAdapter(mongoCollection, {
addCreatedAtField: true
}));
io.listen(3000);
MongoError: The $changeStream stage is only supported on replica sets
Change streams are only available for replica sets and sharded clusters.
More information here.
Please note that, for development purposes, you can have a single MongoDB process acting as a replica set by running rs.initiate()
on the node.
TypeError: this.mongoCollection.insertOne is not a function
You probably passed a MongoDB client instead of a MongoDB collection to the createAdapter
method.
FAQs
The Socket.IO MongoDB adapter, allowing to broadcast events between several Socket.IO servers
We found that @socket.io/mongo-adapter demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
An opt-in lazy import keyword aims to speed up Python startups, especially CLIs, without the ecosystem-wide risks that sank PEP 690.
Security News
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.