基于 Nodejs 的一个分布式实时消息转发系统

发布于 1周前 作者 itying888 来自 nodejs/Nestjs

基于 Nodejs 的一个分布式实时消息转发系统

由于公司业务需要,需要做一个实时的消息转发系统。之前用过基于 php 的 workman.一个开源高性能的 PHP socket 服务器框架。但是我们公司有大量业务基于 Restful Api.技术选型使用 node.js 。框架使用 express4。网上没找到合适的脚手架。就自己写了一个基于 Node.js 、redis、Sockit.io 写了一个高性能实时转发的系统。

Github 地址: https://github.com/gytai/node-msg-sender

消息实时推送,支持在线用户数实时统计。基于 Socket.IO 开发,使用 websocket 推送数据,当浏览器不支持 websocket 时自动切换 comet 推送数据。

支持 Linux,mac,windows 等环境部署。

线上 demo

http://112.74.81.224:3000/

可以通过 url: http://112.74.81.224:3000/sendMsg/?type=private&uid=1504936989000&content=消息内容 向当前用户发送消息

可以通过 url: http://112.74.81.224:3000/sendMsg/?type=public&content=消息内容 向所有在线用户推送消息

uid 为接收消息的 uid,如果不传递则向所有人推送消息 content 为消息内容

注:可以通过 php 或者其它语言的 curl 功能实现后台推送

下载安装

1、git clone https://github.com/gytai/node-msg-sender.git

2、npm install

3、apt-get install redis-server

4、redis-server

后端服务启动停止,先安装 PM2(Advanced Node.js process manager,http://pm2.keymetrics.io/)

启动服务

pm2 start bin/www – name msg-sender

停止服务

pm2 stop msg-sender

求 star......


11 回复

开源是好事。问题是,这个应该属于公司项目,不知道贵司是否同意且知晓该项目开源了?


这是我写的 Demo。里面的东西没有业务。

刚好也要运用这个技术去实现类似的功能,感谢分享。

nodejs 有 使用 rabbitmq 的项目实战的,带些简单的业务(哪怕是注册登录都好)吗

这个确实可以结合一下。有时间我来写个 Demo.也可以一起讨论哈。

已修复。谢谢。

分布式……体现在哪里?
既然号称高性能,就算没有压测数据,至少也要说明支持多少并发多少 tps 吧……

伙计,联系邮箱多少,有些 nodejs 方面的问题咨询

针对基于Nodejs的分布式实时消息转发系统,以下是一个简要的专业回复,包含核心思路和部分代码示例:

核心思路

  1. 系统架构:采用分布式架构,利用多个Nodejs实例分散负载,提高系统性能。
  2. 消息转发:使用Socket.IO实现实时消息转发,支持一对一和一对多消息传递。
  3. 负载均衡:通过Nginx或其他负载均衡器分配请求,确保消息能够均匀分发到各个Nodejs实例。

部分代码示例

  1. Nodejs服务器端(使用Socket.IO和Express):
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

io.on('connection', function(socket) {
    console.log('a user connected');
    socket.on('message', function(msg) {
        // 转发消息逻辑,可根据需求实现一对一或一对多转发
        io.emit('message', msg);
    });

    socket.on('disconnect', function() {
        console.log('user disconnected');
    });
});

server.listen(3000, function() {
    console.log('listening on *:3000');
});
  1. Nginx配置(用于负载均衡):
upstream nodejs_backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;  # 添加更多实例以分散负载
}

server {
    listen 80;

    location / {
        proxy_pass http://nodejs_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

以上代码仅为示例,实际项目中需根据具体需求进行完善和调整。

回到顶部