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.