无论PC 客户端还是手机客户端,可能会遇到需要发布一些广告,这些广告可能是自己开发的,可能是三方的,而且希望是比较通用,能随时发布,随时就能看到效果。
本文提供了一种基于轮询的广告系统,主要是提供了一个大致的框架和少许的代码示例。由于需要比较通用,可能需要三方广告,所以整个广告是以H5页面的形式展示。当然,这个系统既可以展示广告,也可以满足一些常规的业务需求,甚至是用来修复软件BUG等。
整体框架如下:
系统有3端共同组成,客户端,前端,服务端。
客户端提供两个功能:1.提供一个QtWebkit,也就是提供JS执行环境,承载前端页面和JS代码。 2.提供本地接口供JS调用,注入JS对象。
本地接口由ruby来提供。这些接口一部分是由ruby自己实现,一部分是由C++来实现。大部分情况改变的都是ruby脚本,C++的代码改动比较少。
Ruby是通过QtRuby技术来调用Qt,通过SMOKE技术来调用C++。QtRuby技术就是支持使用ruby脚本来开发Qt程序,
和有些公司使用Python开发Qt程序类似。SMOKE是KDE框架下面内置的一个技术,他的作用就是把C++和脚本语言绑定起来。
QtRuby是SMOKE技术在把Qt绑定到ruby环境的一个具体实现。
前端:加载在线html和JS,和服务端交互,通过轮询的方式拉取广告资源,和客户端交互,调用本地接口,展示广告。
服务端:配置广告资源,返回广告资源。支持按照条件过滤。
什么优点
1.尽量脚本化,很少改动C++的代码,C++仅对新增业务支持,大部分的对本地接口支持ruby本身
可以完成,ruby脚本支持更新(启动时一次,后面2小时检查一次),重启软件生效。
2.JS SDK使用在线代码,如果出问题可以在线修改解决问题。
轮询的使用
广告展示对实时性要求不高,在这种场景下可以使用。
和长链接相比每5-10分钟请求一次对服务器压力也有所缓解。
有些客户端在登录或者支付时会跳转到浏览器,客户端也是使用轮询机制,来确认是否
登录或者支付成功。(轮询时间一般指数递增)。
如何使用
1.软件的广告,比如打折促销,某某节日广告等,最典型的就是双十一。
2.第三方广告,接入他们的前端SDK即可。
3.任何其他可以做的事情。比如对用户本地的文件读写,操作注册表,网络操作等等。
这种情况一般是没有界面的,再后台执行的,比如下载一个软件的安装包,然后
执行静默安装的操作。
客户端职责
2.提供一1.提供本地接口供前端调用,本身不处理业务逻辑,业务部分由前端JS来实现
个QtWebkit来供前端执行JS
3.提供一个常驻进程(①主进程调起一个进程②任务计划③服务程序)
前端职责
1.轮询拉取广告资源,判断展示广告条件,展示广告,调用本地接口实现业务
2.开发广告页面,处理业务逻辑
服务端职责
提供查询广告接口,如果有广告就返回给前端。并且支持条件过滤。
更好的做法是使用推荐系统,根据用户的性别,年龄,人群分类,浏览历史等特征
通过算法进行精准推荐。
以上基本是广告系统的全部内容了,不过这个系统不一定只是来展示广告,实际上他能做更多的事情,比如作为一种满足常规业务需求,甚至是修复软件BUG,这个在业内有时候也称为“云指令”,也就是说通过服务器下来的指令来完成一些通用的事情。
这个“云指令”框架如下:
适用场景:
1.一次性任务,比如上报日志文件大小,收集用户信息供决策等
2.应急性任务,比如功能开关需要关掉,崩溃修复,升级程序损坏等
3.常规性任务,威力强大
实现业务:
1.直接使用lua脚本完成业务逻辑
2.可以通过通知主程序做业务逻辑,或者通过IPC从主程序获取数据
3.可以通过写插件,主程序加载后完成业务逻辑
4.可以下载EXE独立完成业务逻辑
难点:稳定性(多进程模型),扩展性
意义:方便做一些临时性或者应急性的需求,或者排除问题以及常规需求等。非常灵活强大。
不建议使用 固定的指令,让客户端去解析,太麻烦。如果有很多条件判断,甚至有循环就比较麻烦。 之前有这样类似的做法后面很难维护。建议直接使用脚本文件,非常灵活。
本文关联的PPT介绍可以在这里下载:https://download.csdn.net/download/zsc_976529378/88878825?spm=1001.2014.3001.5501