Socket.IO 是一个基于 Node.js 的实时应用程序库,它使得在客户端和服务器之间实现实时双向通信变得非常简单。在 Node.js 中,通常会将 Socket.IO 与 Express 框架结合使用,以便更好地管理路由和会话。
Socket.IO 提供了事件驱动的通信方式,允许服务器和客户端通过自定义事件进行通信。它支持 WebSocket、HTTP 长轮询等多种传输方式,确保在不同网络环境下都能保持连接。
Socket.IO 主要有两种类型的通信:
Socket.IO 广泛应用于实时聊天应用、在线游戏、实时数据更新等场景。
在 Node.js 中,通常会将 Socket.IO 实例传递给 Express 的路由器模块,以便在路由处理函数中使用。以下是一个简单的示例:
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// 将 io 实例传递给路由器模块
const router = require('./routes')(io);
app.use('/', router);
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
在 routes.js
文件中:
module.exports = (io) => {
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('disconnect', () => {
console.log('User disconnected');
});
// 处理自定义事件
socket.on('chat message', (msg) => {
io.emit('chat message', msg); // 广播消息
});
});
return router;
};
socket.io
的 cors
选项来解决。const io = socketIo(server, {
cors: {
origin: '*',
methods: ['GET', 'POST']
}
});
通过以上步骤,你可以将 Socket.IO 实例传递给 Express 的路由器模块,并在路由处理函数中使用它来实现实时通信功能。
领取专属 10元无门槛券
手把手带您无忧上云