惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - Franky
腾讯CDC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
V
V2EX
N
Netflix TechBlog - Medium
量子位
Jina AI
Jina AI
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 叶小钗
D
Docker
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Setting up socket.io
Chinwuba · 2026-06-22 · via DEV Community

Chinwuba

This article covers what I learned or maybe didn't really learn.

The Problem With Traditional HTTP

Most web applications use HTTP.

The flow looks like this:

Client → Request → Server
Client ← Response ← Server

Once the server sends the response, the connection is closed.

This works perfectly for:

  • Authentication
  • CRUD operations
  • Fetching data
  • Form submissions

But what happens when the server needs to send information without being asked?

For example:

  • A new task is assigned
  • Someone comments on a task
  • A project status changes
  • A teammate updates a board

With traditional HTTP, the browser would need to keep asking:

"Anything new?"

"Anything new?"

"Anything new?"

This technique is called polling, and it's inefficient.

That's where Socket.io comes in.

What Socket.io Actually Does

Socket.io creates a persistent connection between the client and server.

Instead of repeatedly opening and closing connections, the connection stays alive.

Now communication becomes two-way:

Client ↔ Server

The client can send data whenever it wants.

The server can also send data whenever it wants.

This is what makes real-time applications possible.


Why Express Alone Isn't Enough

One thing that confused me initially was why Socket.io couldn't simply be attached directly to my Express app.

The answer lies in how Express works.

When you write:

app.listen(5000);

Express creates the HTTP server internally.

You don't have direct access to it.

Socket.io, however, needs access to the raw HTTP server.

So instead of:

app.listen(PORT);

The flow becomes:

const httpServer = createServer(app);

Then Socket.io attaches to that server:

const io = new Server(httpServer);

Finally:

httpServer.listen(PORT);

This architecture allows Socket.io and Express to share the same server.


Understanding Events

Socket.io is event-driven.

Everything revolves around two methods:

socket.emit()

and

socket.on()

Think of them as:

emit = send
on = listen

For example:

Client:

socket.emit("join-project", projectId);

Server:

socket.on("join-project", (projectId) => {
  // handle join
});

The client sends.

The server listens.

Simple.


The Concept That Made Everything Click: Rooms

The feature that finally made Socket.io make sense to me was rooms.

Imagine a walkie-talkie.

People on Channel 1 hear messages sent to Channel 1.

People on Channel 2 hear messages sent to Channel 2.

Socket.io rooms work similarly.

In my project management application:

Project A = Room A
Project B = Room B
Project C = Room C

When a user opens a project:

socket.join(projectId);

Now they're listening to updates from that project.

When someone creates a task:

io.to(projectId).emit("task-updated");

Only users in that project receive the event.

Everyone else remains unaffected.

This prevents unnecessary updates and scales much better.


Where Real-Time Events Should Be Triggered

One thing I initially misunderstood was where to emit events.

My first instinct was to put everything inside the Socket.io connection handler.

But that's not where the business logic happens.

The actual changes occur inside route handlers.

For example:

POST /tasks

creates a task.

After successfully creating the task:

  1. Save task to database
  2. Get Socket.io instance
  3. Find project room
  4. Emit update

Conceptually:

Create Task

Database Success

Emit Event

Clients Update UI

This sequence is important.

You never want to emit an event before the database operation succeeds.


Making Socket.io Available Everywhere

Another clever pattern I learned was storing the Socket.io instance on the Express app.

app.set("io", io);

Then inside any route:

const io = req.app.get("io");

This prevents:

  • Circular imports
  • Global variables
  • Messy architecture

Every route can access Socket.io cleanly.


Real-World Example: Task Creation

Imagine a user creates a task.

Without Socket.io:

User A creates task
↓
Database updated
↓
User B sees nothing
↓
Must refresh page

With Socket.io:

User A creates task
↓
Database updated
↓
Server emits event
↓
User B instantly sees update

No refresh required.

That's the power of real-time communication.

Thanks for reading.