一个基于轮询的广告系统

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

相关推荐
Monly214 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu5 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee20215 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
小俊俊的博客6 分钟前
海康RGBD相机使用C++和Opencv采集图像记录
c++·opencv·海康·rgbd相机
7yewh8 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
waicsdn_haha19 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc21 分钟前
C++ 日志输出
开发语言·c++·算法
薄荷故人_23 分钟前
从零开始的C++之旅——红黑树及其实现
数据结构·c++
m0_7482400223 分钟前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
qq_4335545430 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++