成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Pomelo搭建一個簡易的推送平臺

開發 前端
pomelo目前提供的兩個默認sioconnector和hybridconnector 使用的協議并不適合用于做手機推送平臺,在pomelo的一份公開ppt里面,有提到過,網易的消息推送平臺是基于pomelo開發的 ,不過,這里用的前端(frontend)實現的是基于MQTT協議,我估計這個基于MQTT協議實現的 frontend,基本不可能開源出來。

前言

實際上,個人感覺,pomelo 目前提供的兩個默認sioconnectorhybridconnector 使用的協議并不適合用于做手機推送平臺,在pomelo的一份公開ppt里面,有提到過,網易的消息推送平臺是基于pomelo開發的 (一個frontend 支持30w 長連接,消耗了3g 內存,如果我沒記錯數據應該是這樣),不過,這里用的前端(frontend)實現的是基于MQTT協議,我估計這個基于MQTT協議實現的 frontend,基本不可能開源出來。這里只是說,默認提供的frontend不適合用于構建大型的推送平臺(c10m規模的),一般而言(c10k級別的),個人感覺還是夠用的。

為了展示,更多pomelo 的相關特性,可能這里的邏輯業務,與實際有所不同.敬請注意。

推送平臺的架構圖

整個應用的架構圖:

Pushapp

 

后端

  • pomelo@0.4.3

前端

  • android
  • web browser

開發約定

客戶端請求對象

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

服務端返回對象

發給web management

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

發給android客戶端

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

客戶端訪問用的route

android:

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

WebManagement:

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

 

后臺編碼

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

 

sioconnector / hybridconnector

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

app.js 由于我們用到了兩個不同的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.  
  9. //支持 websocket 和 socket  
  10. app.configure('production|development''hybrid-connector', function(){  
  11.     app.set('connectorConfig',  
  12.         {  
  13.             connector : pomelo.connectors.hybridconnector,  
  14.             heartbeat : 300,  
  15.             useDict: true,  
  16.             useProtobuf: true 
  17.  
  18.         });  
  19. }); 

經過這樣的配置,我們就能夠使用兩個不同的connector了.

 

 

 

推送實現

用pomelo 進行消息的推送,非常便捷,由于,我們現在只關注推消息給全部客戶端,那樣就非常簡單了.

推送流程:

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

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

把客戶端添加到相應的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 服務端直接返回用戶列表  
  6.         cb(null ,this.getUsers(channelName));  
  7.     }else {  
  8.         if(!!channel){  
  9.             channel.add(uid ,sid);  
  10.         }  
  11.         //uuid 告訴給服務端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 調用pushserver 添加客戶端到相應頻道的方法.

  1. //sid 統一為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.  
  8.         if(users){  
  9.             next(null, {code: 200, msg: 'push server is ok.', users: users});  
  10.         }else{  
  11.             next(null,{code: 200, msg: "add ok", users: users});  
  12.         }  
  13.     }); 

web 管理端調用消息推送

  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.  
  12. }; 

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

 

 

有一點要注意的,如果pomelo 項目要部署到外網或者局域網,frontend 的host 要填寫當前host 主機的ip 地址

例如:

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

部署到某臺服務器,需要修改

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

客戶端訪問相應的host 的地址.

 

 

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

原文鏈接:http://my.oschina.net/youxiachai/blog/138280

責任編輯:林師授 來源: OSCHINA
相關推薦

2010-03-08 17:20:56

搭建私有云

2022-10-20 11:49:49

JS動畫幀,CSS

2022-08-15 18:01:23

網站Python

2024-04-03 15:20:08

2021-04-25 08:58:00

Go拍照云盤

2024-04-24 11:42:21

Redis延遲消息數據庫

2013-06-28 17:28:04

推送

2021-08-08 21:17:18

管理配置平臺

2023-01-18 07:49:42

2023-10-06 11:48:37

reactvuenodejs

2021-05-19 14:22:46

代碼開發項目

2018-03-01 10:45:25

HTTP服務器程序

2022-11-14 08:01:48

2014-07-21 10:25:12

ENode開發論壇

2022-01-10 11:04:41

單鏈表面試編程

2021-07-19 10:22:52

疫苗設計師百度

2022-02-25 08:32:07

nodemon搭Node.jsJavascript

2016-03-01 14:37:47

華為

2023-09-08 13:10:20

運營分析體系

2024-07-22 07:05:00

nodejs爬蟲管理平臺爬蟲框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线播放一区 | 亚洲国产成人精品女人久久久 | 中文字幕高清av | 国产精品久久久久久久久久久久午夜片 | 欧美簧片| 99re| 国产乱码精品一区二区三区中文 | 久久精品色欧美aⅴ一区二区 | 中文成人在线 | 日韩在线视频一区 | 97精品超碰一区二区三区 | 日日骚网 | 青娱乐av| 日本在线观看视频 | 亚洲国产成人精品久久久国产成人一区 | 亚洲自拍偷拍欧美 | 91在线看片| 一区不卡在线观看 | 欧洲免费毛片 | 一区二区在线 | 亚洲精品久久久久久久久久久 | 超碰日本 | aaa大片免费观看 | 在线色网| 精品国产一区二区国模嫣然 | 色综合天天天天做夜夜夜夜做 | 国产亚洲一区二区精品 | 一区二区国产精品 | 亚洲免费大片 | av黄在线观看 | 亚洲视频在线免费观看 | 欧美中文字幕一区二区三区亚洲 | 中文在线一区二区 | 精品久久中文 | 日韩成人免费中文字幕 | 欧美13videosex性极品 | 日韩精品成人网 | 91欧美激情一区二区三区成人 | 在线a视频网站 | 日韩不卡一区二区 | 日韩欧美成人一区二区三区 |