1. 程式人生 > >基於Nodejs的高併發實時訊息轉發系統 message pusher and written in nodejs based on socket.io and express

基於Nodejs的高併發實時訊息轉發系統 message pusher and written in nodejs based on socket.io and express

基於Nodejs的訊息轉發系統 message pusher and written in nodejs based on socket.io and express

訊息實時推送,支援線上使用者數實時統計。基於Socket.IO開發,使用websocket推送資料,當瀏覽器不支援websocket時自動切換comet推送資料。

支援Linux,mac,windows等環境部署。

效果截圖

node-msg-sender-demo

線上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('當前線上客戶端數:&nbsp;'+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