电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

推送系统实践(一)VIP免费

推送系统实践(一)_第1页
1/17
推送系统实践(一)_第2页
2/17
推送系统实践(一)_第3页
3/17
推送系统实践(一)最近由于项目需要做一个推送系统,借此机会对nodejs和pomelo有了一次实践,在此将整个实践过程记录并分享。什么是pomeloPomelo是基于Node.js的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。Pomelo不但适用于游戏服务器开发,也可用于开发高实时Web应用,它的分布式架构可以使Pomelo比普通的实时Web框架扩展性更好。更多详情参见http://pomelo.netease.com/为什么选pomelo初次接触pomelo也是项目关系,当时我们是要做一个实时在线对战游戏,当时选的就是pomelo,效果不错。所以在做推送系统的时候,也就把pomelo放到技术选型方案中,评估后觉得也比较适合,于是继续使用pomelo,下面进入正题。pomelo安装Ubuntua、安装nodejs要求版本>0.8b、到http://nodejs.org/获取源码包的下载地址,下载nodejs的gz包wgethttp://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gzc、解压编译安装tarzxvfnode-v0.10.28.tar.gzcdnode-v0.10.28./configuremakesudomakeinstalld、检查是否安装成功#node-v2.安装g++gcc等apt-getinstallbuild-essential3.安装npm并设置成http连接apt-getupdateapt-getinstallnpmnpmconfigsetstrict-sslfalsenpmconfigsetregistry"http://registry.npmjs.org/"npminstallpomelo-g详细安装过程可以参见http://blog.csdn.net/jonahzheng/article/details/27658985项目功能介绍主要功能是实现针对移动端的广告实时推送系统,详细需求如下:1.用户状态维护2.在线用户实时推送3.对用户进行分类并打tag。4.挖掘用户特征及tag5.根据tag区分用户并制定推送策略,推送相应的广告。举个例子解释一下,比如有如下场景:两个用户A和B,其中A为男性,B为女性。-AB为用户,性别为tag广告库里面有两个广告C和D,C是汽车类的,D是化妆品类广告。-广告C是包段定向投放给男性,D是全网投放(无论男女都投放)-推广策略Tag–从任意维度给用户打的一个标签。比如性别,年龄,地域等等策略–广告检索的方法。说白了就是如何从一堆的广告到当中根据什么样的算法去选取广告并进行推送。那这里要实现的就是这样一个系统:能够通过离线的数据挖掘对用户进行分类,从而打上不同的tag,再将广告通过不同的推广策略推广给用户一个平台。其中第4点,挖掘用户特征不在本文范围内,本系统着重在于实现一个可扩展的实时在线推送平台。整体架构关于如何实现可扩展的分布式系统及系统架构方面,比如在线用户登录及状态维护,如何实现分布式系统方面属于pomelo范畴,本文也不在重述,有兴趣的童鞋可以查看pomelo的官方文档,本文着重分享的是如何设计和实现业务系统架构。从以上的例子分析其实可以看出,这里面其实有四个方面:用户,tag,策略和广告。用户与tag是多对一的关系,一个用户可以有多个tag。tag与策略是多对多的关系,一个策略可以应用在多个tag;一个tag也可以存在多个策略tag通过pomelo的channel来实现,一个channel代表一个tag。策略通过component来实现,一个component代表一个策略。代码结构如下:appcomponentsdaomysqldomainmonitorserversareaconnectorgate其中,components目录下面存放的是推广策略代码,一个推广策略是一个文件dao目录存放数据存取,比如mysqldomain目录存放各种抽象类monitor目录存放监控代码servers目录存放的是三种类型的server:a.area负责逻辑应用b.connector负责用户连接维护c.gate负责负载均衡下面直接上代码。负载均衡代码,gate/handler/gateHandler.jsvarCode=require('../../../../../shared/code');vardispatcher=require('../../../util/dispatcher');varutils=require('../../../util/utils');/***Gatehandlerthatdispatchusertoconnectors.*/module.exports=function(app){returnnewHandler(app);};varHandler=function(app){this.app=app;};Handler.prototype.queryEntry=function(msg,session,next){varuid=msg.uid;if(!uid){next(null,{code:Code.FAIL});return;}varconnectors=this.app.getServersByType('connector');if(!connecto...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

推送系统实践(一)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部