基於Nodejs的高併發實時訊息轉發系統 message pusher and written in nodejs based on socket.io and express
阿新 • • 發佈:2019-02-03
基於Nodejs的訊息轉發系統 message pusher and written in nodejs based on socket.io and express
訊息實時推送,支援線上使用者數實時統計。基於Socket.IO開發,使用websocket推送資料,當瀏覽器不支援websocket時自動切換comet推送資料。
支援Linux,mac,windows等環境部署。
效果截圖
線上demo
uid為接收訊息的uid,如果不傳遞則向所有人推送訊息
content 為訊息內容
注:可以通過php或者其它語言的curl功能實現後臺推送
下載安裝
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
Web前端程式碼類似:
// 引入前端檔案
<script src="/socket.io/socket.io.js"></script>
<script >
var socket = io.connect('http://localhost:3000');
socket.emit('login', new Date().getTime());
// 後端推送來訊息時
socket.on('message', function(msg){
$('#content').html('收到訊息:'+msg);
$('.notification.sticky').notify();
});
// 後端推送來線上資料時
socket.on('update_online_count' , function(data){
console.log(data);
$('#online_box').html('當前線上客戶端數: '+data.online_count);
});
</script>
其他客戶端
根據websocket協議即可。具體參考websocket協議。
Nodejs後端呼叫api向任意使用者推送資料
var type = req.query.type || msgType.public;
var content = req.query.content || 'none';
var uid = req.query.uid;
switch (type){
case msgType.public:
ioSvc.serverBroadcastMsg(content);
break;
case msgType.private:
if(!uid){
return res.send({code:400,msg:'uid引數必傳'});
}
ioSvc.serverToPrivateMsg(uid,content);
break;
}
Http 傳送資料,可以配置跨站傳送(需要設定跨域放行)。例如安卓或者IOS等其他客戶端也可以方便的傳送訊息。
備註
php 版本可以參考:workman的web-msg-sender