一个基于轮询的广告系统

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python编程作业四:文件操作

目录 一、程序填空1 二、程序填空2 三、众数及词频统计 四、输入古诗并保存 编程素材下载地址:https://download.csdn.net/download/Morse_Chen/88887335?spm1001.2014.3001.5503 一、程序填空1 下面的程序是根据用户输入的星座名称,输出此星座的出…

【C++】面向对象 | 类详解 | this指针

目录 1. 面向过程和面向对象 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8. this指针 8.1 this指针的引出 8.2 this指针…

基于PyTorch深度学习实战入门系列-(1)环境配置

Pytorch环境安装配置2024最新版 下载安装Anaconda Anaconda下载网址:Free Download | Anaconda 创建虚拟环境 打开Anaconda Prompt # conda create -n 环境名 [需要的库] # 例子: conda create -n pytorchpy39 python3.9安装过程中需要确认输入 y 回车…

Filebeat将csv导入es尝试

一、安装 在docker中安装部署ELKfilebeat 二、主要配置 - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /home/centos/pip_v2.csv #源路径 #…

1908 - 伐木工

代码 #include<bits/stdc.h> using namespace std; long long a[1000100],n,m,l1,r,mid,i; bool fm(long long x) {long long s0;for(i1;i<n;i){if(x<a[i]) ssa[i]-x;if(s>m) return true;}return false; } int main() {cin>>n>>m;for(i1;i<n;i…

简易内存池2 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 请实现一个简易内存池,根据请求命令完成内存分配和释放。 内存池支持两种操作命令&#xff0c;REQUEST和RELEASE&#xff0c;其格式为: REQUEST请求的内存大小 …

Day21-磁盘管理之raid及分区

Day21-磁盘管理之raid及分区 1 Raid技术1.1 什么是Raid?1.2 为什么服务器需要Raid?1.3 什么是Raid级别?1.4 Raid有哪些实现方式&#xff1f;1.5 什么是RAID0&#xff1f;&#xff08;图&#xff09;1.6 什么是RAID1&#xff1f;&#xff08;图&#xff09;1.7 什么是RAID5&a…

Python之Flask框架~四大内置对象

1.g global全局对象 g对象是专门用来保存用户的数据的 g对象在一次请求中的所有的代码的地方, 都是可以使用的 突破变量存储位置限制,为数据传递添加了新的方式,比如我们在before_request产生一个数据在后面需要使 用, 可以保存在g对象中, 在其他视图西数中就可以使用这个数据…

LaTeX-设置图像大小

文章目录 LaTeX-设置图像大小1.导入图片2.更改图像大小并旋转图像2.1按比例缩放2.2将图像缩放到特定的宽度和高度2.3将图片设置为与文字宽度相同2.4旋转图片 LaTeX-设置图像大小 在本文中&#xff0c;将解释如何以最常见的格式包含图像&#xff0c;如何缩小、放大和旋转它们。…

Day11:信息打点-Web应用企业产权指纹识别域名资产网络空间威胁情报

目录 Web信息收集工具 业务资产-应用类型分类 Web单域名获取-接口查询 Web子域名获取-解析枚举 Web架构资产-平台指纹识别 思维导图 章节知识点&#xff1a; Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用…

考研机试C++题目精选

更多内容会在godownio.github.io更新 算法练习&#xff08;C代码&#xff09; 考研上机或C语言代码笔试准备&#xff0c;暨大机试原题letcode牛客中南大等高校机试 快速幂算法 题目&#xff1a;输入一个整数 n &#xff0c;求 n^n 的个位数是多少。 快速幂算法&#xff1a;…

集合篇之ArrayList

一、源码如何分析&#xff1f; 1.成员变量 2.构造方法 3.关键方法 一些添加的方法。 二、debug看源码 我们给出下面代码&#xff1a; public void test01() {ArrayList<Integer> list new ArrayList<>();list.add(1);for (int i 2; i < 10; i) {list.add(i…

Java虚拟机(JVM)从入门到实战【上】

Java虚拟机&#xff08;JVM&#xff09;从入门到实战【上】&#xff0c;涵盖类加载&#xff0c;双亲委派机制&#xff0c;垃圾回收器及算法等知识点&#xff0c;全系列6万字。 一、基础篇 P1 Java虚拟机导学课程 P2 初识JVM 什么是JVM Java Virtual Machine 是Java虚拟机。…

Flutter中Future和Stream关系

Future和Stream类是Dart异步编程的核心。 Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。 Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable&#xff0c;…

(三)softmax分类--九五小庞

softmax分类 对数几率回归解决的是二分类的问题&#xff0c;对于多个选项的问题&#xff0c;我们可以使用softmax函数&#xff0c;它是对数几率回归在N个可能不同的值上的推广 softmax各样本分量之和为1&#xff0c;当只有两个类别时&#xff0c;与对数几率回归完全相同 损失…

多个版本的Python如何不冲突?

转载文章&#xff0c;防止忘记或删除 转载于&#xff1a;电脑中存在多个版本的Python如何不冲突&#xff1f; - 知乎 (zhihu.com) 如何安装多版本的Python并与之共存&#xff1f; 如果你的工作涉及到Python多版本之间开发或测试&#xff0c;那么请收藏本文&#xff0c; 如果你…

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…

CSS 【详解】响应式布局(含 rem 详解)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 为什么 rem 能用于实现响应式布局&#xff1f; px 绝对长度单位&#xff0c;不同客户端表现都相同&#xff0c;不具有响应式em 相对长度单位&#xff0c;相对于父元素的 f…

【MATLAB源码-第147期】基于matlab的QPSK调制解调在AWGN信道,瑞利信道,莱斯信道理论与实际误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 四相位移键控&#xff08;QPSK&#xff0c;Quadrature Phase Shift Keying&#xff09;是一种重要的数字调制技术&#xff0c;它通过改变信号的相位来传输数据。与其他调制技术相比&#xff0c;QPSK在相同的带宽条件下能够传…

【HTML】HTML基础4.2(锚点链接)

目录 解释锚点链接 “公式” 例子 点击回首页 解释锚点链接 在我们浏览网页的时候&#xff0c;总有目录一样的功能&#xff0c;比如 这个时候&#xff0c;只要点击相应目录&#xff0c;就可以直接跳转到相应界面&#xff0c;比如&#xff0c;点击“演职员表” 今天就让我们一…