Nodejs 使用和 socket.io 搭建推送服务,后端如何构建?

Nodejs 使用和 socket.io 搭建推送服务,后端如何构建?

因为项目需要实时推送一个消息,现在使用的技术是 nodejs 和 socket.io ,以前没有这方面的经验,后端到底需要如何推送呢?是不是跑一个定时器,执行后端文件?还是前端轮询?轮询的话好像本末倒置了。望各位指教!

21 回复

你似乎什么都不懂,先去了解什么是 socket.io 再说


socket.io 不是封装了 websocket 和 comet 的一个类库么?

那你既然知道 websocket 那你就应该知道 websocket 是不用轮询的,只要你连接一建立,那么服务端就可以往客户端推送消息,直接写就可以了。完全又你服务端决定,这个还要什么轮询

需要推送就服务端直接推送了啊

我的实现场景是这样的,服务端什么时候去推送呢?因为数据是实时的。比如全网用户累计的积分,金币之类的东西。

你在服务端实现一个 callback 啊,你数据出来了就调用那个 callback , callback 里面进行推送操作

场景是前端需要获得实时数据,这个数据每秒都在变化,那后端是不是每秒都要推送?没有接触过 nodejs ,请指点一下。


这是我 server 端的代码:

io.on(‘connection’, function (socket) {
socket.emit(‘news’, { hello: ‘world’ });
socket.on(‘my other event’, function (data) {
console.log(data);
});
});

这是 client 端代码:
var socket = io.connect(‘http://localhost:3000’);
socket.on(‘news’,function(data){
console.log(data);
socket.emit(‘my other event’,{my:‘data’});
});

现在前端已经可以获取到{hello:‘world’}这个 json ,那么我如何保证实时推送?

socket.io 有内存泄漏

那现成的来用啊 jpush 啥的

严重么

项目要自己实现哇

严重 每天重启服务器

额,那有没有什么靠谱的方案推荐

有数据就调用 socket.emit 发送给客户端呗

可以考虑用 redis 的 publish 和 subscribe

对 node 不是很熟,但是如果上层 api 的底层用到 epoll 等异步非阻塞的 io 的话,一半都能做到推送吧,轮询是操作系统内核在做的事情

可以直接 emqtt.io

嗯 可以试试 emqtt 他支持 MQTT 协议、 sockjs 协议、 stomp 协议,可以用到网页、手机、 pc 都可以,值得一试

我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方便,GoEasy 就挺不错的,我昨天试了一下,代码简洁易懂,几分钟我就洗了一个自己的实时推送功能;官网: http://goeasy.io/

在 Node.js 中使用 Socket.io 搭建推送服务,后端构建主要包括以下几个步骤:

  1. 初始化项目: 首先,你需要初始化一个 Node.js 项目,并安装必要的依赖。

    mkdir push-service
    cd push-service
    npm init -y
    npm install express socket.io
    
  2. 创建服务器: 使用 Express 和 Socket.io 创建一个服务器。

    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.on('connection', (socket) => {
      console.log('a user connected');
    
      socket.on('disconnect', () => {
        console.log('user disconnected');
      });
    
      socket.on('message', (msg) => {
        console.log('message: ' + msg);
        io.emit('message', msg); // 广播消息给所有客户端
      });
    });
    
    const PORT = process.env.PORT || 3000;
    server.listen(PORT, () => console.log(`Server running on port ${PORT}`));
    
  3. 运行服务器: 保存上述代码为 server.js,然后运行服务器。

    node server.js
    
  4. 前端连接: 前端代码使用 Socket.io 客户端库连接到服务器,并处理接收到的消息。

    <script src="/socket.io/socket.io.js"></script>
    <script>
      const socket = io();
      socket.on('message', (msg) => {
        console.log('message: ' + msg);
      });
      socket.emit('message', 'Hello Server!');
    </script>
    

这样,你就完成了一个简单的基于 Node.js 和 Socket.io 的推送服务后端构建。

回到顶部