基于 Nodejs 的一个分布式实时消息转发系统
基于 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......
开源是好事。问题是,这个应该属于公司项目,不知道贵司是否同意且知晓该项目开源了?
这是我写的 Demo。里面的东西没有业务。
赞!👍
刚好也要运用这个技术去实现类似的功能,感谢分享。
nodejs 有 使用 rabbitmq 的项目实战的,带些简单的业务(哪怕是注册登录都好)吗
这个确实可以结合一下。有时间我来写个 Demo.也可以一起讨论哈。
已修复。谢谢。
分布式……体现在哪里?
既然号称高性能,就算没有压测数据,至少也要说明支持多少并发多少 tps 吧……
伙计,联系邮箱多少,有些 nodejs 方面的问题咨询
针对基于Nodejs的分布式实时消息转发系统,以下是一个简要的专业回复,包含核心思路和部分代码示例:
核心思路
- 系统架构:采用分布式架构,利用多个Nodejs实例分散负载,提高系统性能。
- 消息转发:使用Socket.IO实现实时消息转发,支持一对一和一对多消息传递。
- 负载均衡:通过Nginx或其他负载均衡器分配请求,确保消息能够均匀分发到各个Nodejs实例。
部分代码示例
- 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');
});
- 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;
}
}
以上代码仅为示例,实际项目中需根据具体需求进行完善和调整。