mirror of
https://github.com/socketio/socket.io.git
synced 2026-01-09 15:08:12 -05:00
The example is now available with different syntaxes: - CommonJS - ES modules - TypeScript Related: https://github.com/socketio/socket.io/pull/4787
67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
const express = require("express");
|
|
const { createServer } = require("node:http");
|
|
const { join } = require("node:path");
|
|
const { Server } = require("socket.io");
|
|
const session = require("express-session");
|
|
|
|
const port = process.env.PORT || 3000;
|
|
|
|
const app = express();
|
|
const httpServer = createServer(app);
|
|
|
|
const sessionMiddleware = session({
|
|
secret: "changeit",
|
|
resave: true,
|
|
saveUninitialized: true,
|
|
});
|
|
|
|
app.use(sessionMiddleware);
|
|
|
|
app.get("/", (req, res) => {
|
|
res.sendFile(join(__dirname, "index.html"));
|
|
});
|
|
|
|
app.post("/incr", (req, res) => {
|
|
const session = req.session;
|
|
session.count = (session.count || 0) + 1;
|
|
res.status(200).end("" + session.count);
|
|
|
|
io.to(session.id).emit("current count", session.count);
|
|
});
|
|
|
|
app.post("/logout", (req, res) => {
|
|
const sessionId = req.session.id;
|
|
req.session.destroy(() => {
|
|
// disconnect all Socket.IO connections linked to this session ID
|
|
io.to(sessionId).disconnectSockets();
|
|
res.status(204).end();
|
|
});
|
|
});
|
|
|
|
const io = new Server(httpServer);
|
|
|
|
io.engine.use(sessionMiddleware);
|
|
|
|
io.on("connection", (socket) => {
|
|
const req = socket.request;
|
|
|
|
socket.join(req.session.id);
|
|
|
|
socket.on("incr", (cb) => {
|
|
req.session.reload((err) => {
|
|
if (err) {
|
|
// session has expired
|
|
return socket.disconnect();
|
|
}
|
|
req.session.count = (req.session.count || 0) + 1;
|
|
req.session.save(() => {
|
|
cb(req.session.count);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
httpServer.listen(port, () => {
|
|
console.log(`application is running at: http://localhost:${port}`);
|
|
});
|