UNPKG

uwebsockets

Version:

Fastest uWebSockets server for Node.js – µWebSockets outperforms Socket.IO & Fastify. Built in C++ for high-performance networking & pub/sub.

77 lines (72 loc) 1.94 kB
const uWS = require("../uws.js"); const PORT = Number(process.env.PORT || 9004); uWS .App() .ws("/*", { compression: uWS.SHARED_COMPRESSOR, maxPayloadLength: 16 * 1024 * 1024, idleTimeout: 30, maxBackpressure: 1024 * 1024, upgrade: (res, req, context) => { const room = req.getQuery("room") || "general"; const user = req.getQuery("user") || `guest-${Date.now()}`; res.upgrade( { room, user }, req.getHeader("sec-websocket-key"), req.getHeader("sec-websocket-protocol"), req.getHeader("sec-websocket-extensions"), context ); }, open: (ws) => { ws.subscribe(`room:${ws.room}`); ws.publish( `room:${ws.room}`, JSON.stringify({ event: "join", room: ws.room, user: ws.user, timestamp: Date.now(), }) ); }, message: (ws, message, isBinary) => { const payload = JSON.stringify({ event: "message", room: ws.room, user: ws.user, isBinary, data: isBinary ? Buffer.from(message).toString("base64") : Buffer.from(message).toString(), timestamp: Date.now(), }); ws.publish(`room:${ws.room}`, payload); }, close: (ws) => { ws.publish( `room:${ws.room}`, JSON.stringify({ event: "leave", room: ws.room, user: ws.user, timestamp: Date.now(), }) ); }, }) .get("/", (res) => { res .writeHeader("content-type", "application/json; charset=utf-8") .end( JSON.stringify({ ok: true, usage: `ws://localhost:${PORT}/?room=general&user=alice`, }) ); }) .listen(PORT, (token) => { if (token) { console.log(`PubSub chat server listening on ws://localhost:${PORT}`); return; } console.error(`Failed to listen on port ${PORT}`); });