• 一个基于轮询的广告系统


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

  • 相关阅读:
    马斯克欲“放手”,终止收购 Twitter
    架构师之路,从「存储选型」起步
    CH34X-MPHSI高速Master扩展应用—SPI设备调试
    为什么建议框架源码学习从Mybatis开始?能说这么清楚的,少见了
    Flutter笔记:发布一个多功能轮播组件 awesome_carousel
    流式数据湖平台实战 | HudiSQL DML
    【每日一题】补档 CF1799C. Double Lexicographically Minimum | 构造 | 简单
    webrtc nack
    Go的安装及环境变量的配置
    《研发效能(DevOps)工程师国家职业技术认证》工信部教考中心认证证书:塑造研发效能的黄金标准丨IDCF
  • 原文地址:https://blog.csdn.net/zsc_976529378/article/details/136294433