node.js 利用 socket.io 定时推送数据

Posted by Yun on Thu, Dec 5, 2019

socket.io 是一种基于轮询、长连接、或 WebSocket 的双向通信 node.js 库,它能够自适应选用最合适的方法建立通信。

本文介绍一种在 node.js 服务端定时主动推送数据的方法。

1. 所需要的依赖库

node.js 轻量级框架 express、双向通信库 socket.io、定时任务工具 node-schedule

2. 代码实现

 1const config = require("./configure.js");  // 配置文件
 2const schedule = require("node-schedule");
 3const axios = require("axios").default;
 4const app = require("express")();
 5const server = require("http").createServer(app);
 6const io = require("socket.io")(server);
 7
 8const ws = io.of(config.SOCKET_IO_NAMESPACE);  // 获取实例
 9let counter = 0;
10
11ws.on("connection", function(socket) {  // 监听连接、断连事件
12  counter += 1;
13  console.log("the connection +1, now is", counter);
14
15  socket.on("disconnect", function() {
16    counter -= 1;
17    console.log("the connection -1, now is", counter);
18  });
19});
20
21// 定时推送任务
22const bgPushTask = schedule.scheduleJob("*/2 * * * * *", async function() {
23  if (counter > 0) {
24    try {
25      const res = await axios.get(config.RESTFUL_API_URI);
26      ws.emit("push_data", res.data);  // 推送消息
27      console.log("Push Data at", Date());
28    } catch (error) {
29      console.log(error);
30    }
31  }
32});
33
34server.listen(config.SERVER_PORT);

3. 相关链接


版权声明:本文遵循 CC BY-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

Copyright statement: This article follows the CC BY-SA 4.0 copyright agreement. For reprinting, please attach the original source link and this statement.