Skip to content

Repository files navigation

Socket.IO Postgres adapter

The @socket.io/postgres-adapter package allows broadcasting packets between multiple Socket.IO servers.

Diagram of Socket.IO packets forwarded through PostgreSQL

Table of contents

Supported features

Featuresocket.io versionSupport
Socket management4.0.0✅ YES (since version 0.1.0)
Inter-server communication4.1.0✅ YES (since version 0.1.0)
Broadcast with acknowledgements4.5.0✅ YES (since version 0.3.0)
Connection state recovery4.6.0❌ NO

Installation

npm install @socket.io/postgres-adapter

Usage

Standalone

import{Server}from"socket.io";import{createAdapter}from"@socket.io/postgres-adapter";importpgfrom"pg";constio=newServer();constpool=newpg.Pool({user: "postgres",host: "localhost",database: "postgres",password: "changeit",port: 5432,});pool.query(` CREATE TABLE IF NOT EXISTS socket_io_attachments ( id bigserial UNIQUE, created_at timestamptz DEFAULT NOW(), payload bytea );`);pool.on("error",(err)=>{console.error("Postgres error",err);});io.adapter(createAdapter(pool));io.listen(3000);

With Node.js cluster

importclusterfrom"node:cluster";import{createServer}from"node:http";import{availableParallelism}from"node:os";import{Server}from"socket.io";import{setupPrimary}from"@socket.io/postgres-adapter"import{createAdapter}from"@socket.io/cluster-adapter";importpgfrom"pg";if(cluster.isPrimary){constpool=newpg.Pool({user: "postgres",password: "changeit",});awaitpool.query(` CREATE TABLE IF NOT EXISTS socket_io_attachments ( id bigserial UNIQUE, created_at timestamptz DEFAULT NOW(), payload bytea ); `);setupPrimary(pool);for(leti=0;i<availableParallelism();i++){cluster.fork();}}else{constio=newServer({adapter: createAdapter(),});io.on("connection",(socket)=>{/* ... */});io.listen(3000);}

Options

NameDescriptionDefault value
channelPrefixThe prefix of the notification channel.socket.io
tableNameThe name of the table for payloads over the 8000 bytes limit or containing binary data.socket_io_attachments
payloadThresholdThe threshold for the payload size in bytes (see https://www.postgresql.org/docs/current/sql-notify.html).8_000
cleanupIntervalNumber of ms between two cleanup queries.30_000
heartbeatIntervalThe number of ms between two heartbeats.5_000
heartbeatTimeoutThe number of ms without heartbeat before we consider a node down.10_000

License

MIT

About

The Socket.IO Postgres adapter, allowing to broadcast events between several Socket.IO servers

Topics

Resources

Stars

27 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages