一个基于轮询的广告系统

无论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

相关推荐
尘浮生4 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo5 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
Tech Synapse10 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
乌啼霜满天24918 分钟前
JDBC编程---Java
java·开发语言·sql
Smile丶凉轩19 分钟前
微服务即时通讯系统的实现(服务端)----(1)
c++·git·微服务·github
色空大师31 分钟前
23种设计模式
java·开发语言·设计模式
萝卜兽编程43 分钟前
优先级队列
c++·算法
Bruce小鬼44 分钟前
QT文件基本操作
开发语言·qt
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热1 小时前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee