nodejs 使用socket.io进行站内信通知

最近在用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】已经到期,请及时联系续费!` // 发送内容
     } 
)

以下是一个使用Socket.IONode.js中实现通讯的示例代码: 1. 安装Socket.IO模块: ```shell npm install socket.io ``` 2. 创建服务器端(server.js): ```javascript var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); // 监听客户端连接事件 io.on('connection', function(socket){ console.log('A client connected.'); // 监听客户端发送的消息事件 socket.on('message', function(data){ console.log('Received message from client:', data); // 触发事件告知客户端 io.emit('message', 'Server received your message: ' + data); }); // 监听客户端离开事件 socket.on('disconnect', function(){ console.log('A client disconnected.'); // 触发事件告知服务端 io.emit('disconnect', 'A client disconnected.'); }); }); // 启动服务器 server.listen(3000, function(){ console.log('Server is running on port 3000.'); }); ``` 3. 创建客户端(client.html): ```html <!DOCTYPE html> <html> <head> <title>Socket.IO Client</title> <script src="https://cdn.socket.io/socket.io-3.1.3.min.js"></script> <script> var socket = io(); // 发送消息给服务端 socket.emit('message', 'Hello, server!'); // 监听服务端发送的消息事件 socket.on('message', function(data){ console.log('Received message from server:', data); }); // 监听服务端触发的离开事件 socket.on('disconnect', function(data){ console.log('Server:', data); }); </script> </head> <body> <h1>Socket.IO Client</h1> </body> </html> ``` 请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值