最近在用nodejs帮客户开发一个内容平台,后台用户需要实时接收通知,比如有客户要到期了,需要提醒,不啰嗦直接上代码:
1、先安装socket.io,socket版本:4.8.0
npm i socket.io
2、引入socket.io并配置
var app = require('../app');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
var socketIO = require('socket.io');
var server = http.createServer(app.callback());
server.listen(port);
// socket 消息
const io = socketIO(server,{
cors:{
origin:'*', // 跨域配置
method: ['POST',"GET"]
}
});
// 将socket.io实例暴露为全局变量
global.io = io;
const users = {};
// 监听连接事件
io.on('connection', (socket) => {
// 定义一个全局函数来发送消息
global.sendMessage = (data) => {
const { from, to, content,type } = data;
const toUser = users[to];
if (!from || !to) return; // 确保双方都已登录
// 通知接收者
io.to(toUser).emit(type == 1 ? 'systemMessage' : (type == 2 ? 'simpleMessage' : 'toToMessage'), { from, content, type });
};
// 私信
socket.on('simpleMessage', (data) => {
console.log(`simpleMessage`,data);
});
// 系统消息
socket.on('systemMessage', (data) => {
console.log(`systemMessage`,data);
});
// 待办
socket.on('todoMessage', (data) => {
console.log(`todoMessage`,data);
});
// 用户登录(这里假设通过某种方式验证用户身份)
socket.on('login', (userId) => {
users[userId] = socket.id;
console.log(`User ${userId} connected.`);
});
// 用户下线
socket.on("disconnect", (data) => {
console.log('下线',data)
});
});
3、可以在其他地方发送消息的方法
global.sendMessage(
{
from: 1, // 发送者ID
to: 2, // 接收者ID
content: `您的客户【XXX】已经到期,请及时联系续费!` // 发送内容
}
)