日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
用Pomelo搭建一個(gè)簡(jiǎn)易的推送平臺(tái)

前言

贛州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

實(shí)際上,個(gè)人感覺,pomelo 目前提供的兩個(gè)默認(rèn)sioconnectorhybridconnector 使用的協(xié)議并不適合用于做手機(jī)推送平臺(tái),在pomelo的一份公開ppt里面,有提到過(guò),網(wǎng)易的消息推送平臺(tái)是基于pomelo開發(fā)的 (一個(gè)frontend 支持30w 長(zhǎng)連接,消耗了3g 內(nèi)存,如果我沒(méi)記錯(cuò)數(shù)據(jù)應(yīng)該是這樣),不過(guò),這里用的前端(frontend)實(shí)現(xiàn)的是基于MQTT協(xié)議,我估計(jì)這個(gè)基于MQTT協(xié)議實(shí)現(xiàn)的 frontend,基本不可能開源出來(lái)。這里只是說(shuō),默認(rèn)提供的frontend不適合用于構(gòu)建大型的推送平臺(tái)(c10m規(guī)模的),一般而言(c10k級(jí)別的),個(gè)人感覺還是夠用的。

為了展示,更多pomelo 的相關(guān)特性,可能這里的邏輯業(yè)務(wù),與實(shí)際有所不同.敬請(qǐng)注意。

推送平臺(tái)的架構(gòu)圖

整個(gè)應(yīng)用的架構(gòu)圖:

后端

  • pomelo@0.4.3

前端

  • android
  • web browser

開發(fā)約定

客戶端請(qǐng)求對(duì)象

 
 
 
 
  1. {
  2.     "role": "client/server",
  3.     "apikey": "String",
  4.     "clientId": "String"
  5. }

服務(wù)端返回對(duì)象

發(fā)給web management

 
 
 
 
  1. {
  2.     "code": "Int httpCode ex: 200",
  3.     "msg": "String",
  4.     "users": "Array 客戶端的clientId 值 ex:["android1"] "
  5. }

發(fā)給android客戶端

 
 
 
 
  1. {
  2.     "code": "Int httpCode ex: 200",
  3.     "msg": "String"
  4. }

客戶端訪問(wèn)用的route

android:

connector route = sio-connector.entryHandler.enter, 用于把當(dāng)前客戶端加入到推送頻道當(dāng)中

WebManagement:

connector route = hybrid-connector.entryHandler.enter,用于連接服務(wù)器.
backend route = pushserver.pushHandler.pushAll, 把消息推送到所有已連接的客戶端.

后臺(tái)編碼

Pomelo 有個(gè)特點(diǎn),就是約定開發(fā),很多地方是約定好的配置,優(yōu)點(diǎn)是,架構(gòu)清晰,可讀性好,缺點(diǎn)是,需要大量的文檔支持,目前而言,pomelo的官方文檔做的不好的地方就是,雖然文檔都有了,但是太零散了,分類不清楚,還有就是文檔沒(méi)跟上開發(fā),有時(shí)候,你不閱讀里面源碼根本不知道這個(gè)api要傳那些參數(shù).

sioconnector / hybridconnector

由于pomelo 0.3 以后新增了一個(gè)新的connector:hybridconnector,支持socket和websocket,使用二進(jìn)制通訊協(xié)議,但是除了,網(wǎng)頁(yè) js版本和c 客戶端實(shí)現(xiàn)了這個(gè)connector,其他客戶端均還沒(méi)實(shí)現(xiàn),所以,我們還需要一個(gè)兼容android 客戶端的connector: siocnnector,關(guān)于兩個(gè)connector 具體比較,以后有空重寫這篇的時(shí)候,暫時(shí),你只要知道,這個(gè)兩個(gè)connector,一個(gè)基于socket.io,一個(gè)基于socket和websocket 即可.

app.js由于我們用到了兩個(gè)不同的connector,所以要在app.js寫上:

 
 
 
 
  1. // 支持 socket.io
  2. app.configure('production|development', 'sio-connector', function(){
  3.     app.set('connectorConfig',
  4.         {
  5.             connector : pomelo.connectors.sioconnector
  6.         });
  7. });
  8. //支持 websocket 和 socket
  9. app.configure('production|development', 'hybrid-connector', function(){
  10.     app.set('connectorConfig',
  11.         {
  12.             connector : pomelo.connectors.hybridconnector,
  13.             heartbeat : 300,
  14.             useDict: true,
  15.             useProtobuf: true
  16.         });
  17. });

經(jīng)過(guò)這樣的配置,我們就能夠使用兩個(gè)不同的connector了.

推送實(shí)現(xiàn)

用pomelo 進(jìn)行消息的推送,非常便捷,由于,我們現(xiàn)在只關(guān)注推消息給全部客戶端,那樣就非常簡(jiǎn)單了.

推送流程:

  • 根據(jù)uuid 把 android 客戶端添加到各自的推送頻道當(dāng)中.
  • web 端根據(jù)uuid 把消息推送的全部在線的客戶端.

為了教學(xué)的方便,這里的uuid 硬編碼為: xxx-xx--xx-xx

把客戶端添加到相應(yīng)的channel

 
 
 
 
  1. //把客戶端添加到推送列表中
  2. PushRemote.prototype.add = function(uid, role, sid, channelName, cb){
  3.     var channel = this.channelService.getChannel(channelName, true);
  4.     if(role === 'server'){
  5.         //web 服務(wù)端直接返回用戶列表
  6.         cb(null ,this.getUsers(channelName));
  7.     }else {
  8.         if(!!channel){
  9.             channel.add(uid ,sid);
  10.         }
  11.         //uuid 告訴給服務(wù)端onAdd 事件
  12.         // [{uid: userId, sid: frontendServerId}]
  13.         var server = [{uid: channelName, sid: sid}];
  14.        this.channelService.pushMessageByUids('onAdd', {msg: "add ok", users:this.getUsers(channelName)},server, function(err){
  15.            if(err){
  16.                console.log(err);
  17.                return;
  18.            }
  19.        });
  20.     }
  21. };

Frontend 利用rpc 調(diào)用pushserver 添加客戶端到相應(yīng)頻道的方法.

 
 
 
 
  1. //sid 統(tǒng)一為web managment 所在的 frontend server.
  2.     this.app.rpc.pushserver.pushRemote.add(session, uid,role, 'connector-server-client', uuid, function(err, users){
  3.         if(err){
  4.             console.log(err);
  5.             return;
  6.         }
  7.         if(users){
  8.             next(null, {code: 200, msg: 'push server is ok.', users: users});
  9.         }else{
  10.             next(null,{code: 200, msg: "add ok", users: users});
  11.         }
  12.     });

web 管理端調(diào)用消息推送

 
 
 
 
  1. Handler.prototype.pushAll = function(msg, session, next){
  2.     var pushMsg = this.channelService.getChannel(msg.apikey, false);
  3.     pushMsg.pushMessage('onMsg',{msg: msg.msg}, function(err){
  4.        if(err){
  5.            console.log(err);
  6.        } else{
  7.            console.log('push ok');
  8.            next(null, {code: 200, msg: 'push is ok.'});
  9.        }
  10.     });
  11. };

以上就是主要客戶端如何加入到推送隊(duì)列的代碼,以及web 管理端進(jìn)行消息推送的主要代碼,是不是很簡(jiǎn)單! 完整代碼可以參閱我的github https://github.com/youxiachai

有一點(diǎn)要注意的,如果pomelo 項(xiàng)目要部署到外網(wǎng)或者局域網(wǎng),frontend 的host 要填寫當(dāng)前host 主機(jī)的ip 地址

例如:

 
 
 
 
  1. "connector": [
  2.     {"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientPort": 3010, "frontend": true}
  3.         ]

部署到某臺(tái)服務(wù)器,需要修改

 
 
 
 
  1. "connector": [
  2.     {"id": "connector-server-1", "host": "192.168.1.107", "port": 3150, "clientPort": 3010, "frontend": true}
  3.         ]

客戶端訪問(wèn)相應(yīng)的host 的地址.

客戶端和服務(wù)端的github 地址: https://github.com/youxiachai/pomelo-pushServer-Demo


本文題目:用Pomelo搭建一個(gè)簡(jiǎn)易的推送平臺(tái)
標(biāo)題路徑:http://m.5511xx.com/article/cogosee.html