NodeJS Socket.io介绍
封面图
•
2025-11-07
•
nodejs
201
0
0
0
Socket.IO 是一个用于实时通信的 JavaScript 库,它可以在 **Node.js**(服务器端)和 **浏览器**(客户端)之间建立 **双向实时通信**。它基于 **WebSocket** 协议,并在不支持 WebSocket 的环境中自动回退到其他协议(如长轮询),从而实现跨平台、跨浏览器的实时通信。 --- ## 🌐 什么是 Socket.IO? Socket.IO 是一个 **实时网络应用框架**,允许客户端与服务器之间进行 **双向实时通信**。它非常适合构建: - 实时聊天应用 - 在线协作工具 - 实时通知系统 - 游戏对战系统 - 数据监控仪表板 --- ## 🔧 Socket.IO 的主要特性 | 特性 | 描述 | |------|------| | **实时通信** | 使用 WebSocket 或其他降级协议实现实时数据传输 | | **双向通信** | 支持客户端和服务器之间的消息发送和接收 | | **事件驱动** | 基于事件机制,支持自定义事件名 | | **跨平台** | 支持 Node.js、浏览器、React Native 等多种环境 | | **自动重连** | 如果连接中断,会自动尝试重新连接 | | **命名空间和房间** | 可以将连接分组管理,便于控制通信范围 | --- ## 🧩 Socket.IO 的基本结构 ### 1. **服务端(Node.js)** 使用 `socket.io` 包来创建一个服务器并监听连接: ```js const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server); io.on('connection', (socket) => { console.log('a user connected'); socket.on('chat message', (msg) => { console.log('message: ' + msg); io.emit('chat message', msg); // 向所有客户端广播消息 }); socket.on('disconnect', () => { console.log('user disconnected'); }); }); server.listen(3000, () => { console.log('listening on *:3000'); }); ``` --- ### 2. **客户端(浏览器)** 使用 `socket.io-client` 连接到服务器: ```html <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); socket.on('connect', () => { console.log('connected to server'); }); socket.on('chat message', (msg) => { const li = document.createElement('li'); li.textContent = msg; document.getElementById('messages').appendChild(li); }); document.getElementById('form').addEventListener('submit', function(e) { e.preventDefault(); const input = document.getElementById('input'); socket.emit('chat message', input.value); input.value = ''; }); </script> ``` --- ## 🔄 Socket.IO 的通信方式 Socket.IO 使用 **事件** 进行通信,常见的事件包括: | 事件 | 说明 | |------|------| | `connection` | 当客户端连接时触发 | | `message` | 通用消息事件(可自定义) | | `disconnect` | 当客户端断开连接时触发 | | `reconnect` | 当客户端重新连接时触发 | | `error` | 发生错误时触发 | --- ## 🧱 高级功能 ### 1. **命名空间(Namespaces)** 可以将不同的通信逻辑隔离,比如: ```js const chatNamespace = io.of('/chat'); chatNamespace.on('connection', (socket) => { // 处理 chat 命名空间下的连接 }); ``` ### 2. **房间(Rooms)** 可以将多个客户端加入同一个房间,只向该房间内的用户发送消息: ```js socket.join('room1'); // 加入房间 io.to('room1').emit('event', data); // 向房间内所有用户发送消息 ``` ### 3. **自定义传输协议** Socket.IO 支持自定义传输方式,例如通过 HTTPS 或 WebSocket 代理。 --- ## ✅ 安装 Socket.IO ### 服务端安装: ```bash npm install socket.io ``` ### 客户端安装(如果需要): ```bash npm install socket.io-client ``` --- ## 🧠 小结 | 项目 | 内容 | |------|------| | 用途 | 实时双向通信 | | 协议 | WebSocket / 长轮询等 | | 语言 | JavaScript(支持 Node.js 和浏览器) | | 核心功能 | 事件通信、命名空间、房间、自动重连 | | 适用场景 | 实时聊天、在线协作、游戏、通知系统 | --- 如果你有具体的使用场景或问题,我可以帮你写出更详细的示例代码!
上一篇:
JavaScript获取浏览器版本等信息
下一篇:
Node.js 全局对象
标题录入,一次不能超过6条
留言
评论