一个基于轮询的广告系统

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器数据恢复】昆腾存储中raid5磁盘阵列数据恢复案例

服务器数据恢复环境&故障: 10个磁盘柜,每个磁盘柜配24块硬盘。9个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。 元数据存储中24块硬盘,组建了9组RAID1阵列1组RAID10阵列,4个全局热备硬盘。 数据存储中&#xff0…

Java基于springboot的个人理财系统

基于springboot的个人理财系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了个人理财系统的开发全过程。通过分析个人理财系统管理的不足,创建了一个计算机管理个人理财系统的方案。文章介绍了个…

考研机试C++题目精选

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

【复试2.293.1】c语言——基础杂项

1.define定义常量类似全局变量,引用是直接拼到代码中去。 2.关于e 3.参数传递 形参直接接收的是数组的起始地址 4.数组越界乱码问题 5.scanf读字符串的时候会自动在末尾放0(结束符 6.scanf是读取输入缓冲区的数据,是一种拿走操作。读取若有…

文本多分类

还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】_ernir 文本分类-CSDN博客 /usr/bin/python3 -m pip install --upgrade pip python3-c"import platform;print(platform.architecture()[0]);print(platform.machine…

Linux第67步_linux字符设备驱动_注册和注销

1、字符设备注册与注销的函数原型” /*字符设备注册的函数原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主设备号,Limnux下每个设备都有一个设备号,设备号分…

【六袆 - React】Next.js:React 开发框架;Next.js开发框架的特点

Next.js:React 开发框架 Next.js的特点 1.直观的、基于页面的路由系统(并支持动态路由) Next.js 提供了基于文件系统的路由,意味着你可以通过创建页面文件来定义路由。 伪代码示例: // pages/index.js export defa…

MYSQL--JDBC优化

一.JDBC优化: 优化前提: 有时候我们并不清楚某些表当中一共有多少列,以及这些列的数据类型,这个时候我们就需要提前通过一些方法提前了解到这些数据,从而更好的进行输出 具体语句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

【数学建模获奖经验】2023第八届数维杯数学建模:华中科技大学本科组创新奖获奖分享

2024年第九届数维杯大学生数学建模挑战赛将于:2024年5月10日08:00-5月13日09:00举行,近期同学们都开始陆续进入了备赛阶段,今天我们就一起来看看上一届优秀的创新奖选手都有什么获奖感言吧~希望能帮到更多热爱数学建模的同学。据说点赞的大佬…

elment-ui table表格排序后 清除排序箭头/恢复默认排序 的高亮样式

问题描述: 1.默认排序是按照名称升序排列(图一) 2.在选择了筛选项以及其他排序方式之后,箭头高亮是这样的(图二) 3.当我点击清空按钮后,类型清空了,并且传给后端的排序方式是名称/升…

探索色彩搭配的奥秘:如何选择适合产品的理想配色方案

title: 探索色彩搭配的奥秘:如何选择适合产品的理想配色方案 date: 2024/3/1 20:47:45 updated: 2024/3/1 20:47:45 tags: 色彩搭配品牌形象用户体验情感连接信息传达视觉层次色调选择 引言 友善的色彩搭配和色调选择是现代产品设计中不可忽视的关键因素。通过正确…

Linux yum安装pgsql出现Bad GPG signature错误

官方文档:https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

Rust使用calamine读取excel文件,Rust使用rust_xlsxwriter写入excel文件

Rust使用calamine读取已存在的test.xlsx文件全部数据,还读取指定单元格数据;Rust使用rust_xlsxwriter创建新的output.xlsx文件,并写入数据到指定单元格,然后再保存工作簿。 Cargo.toml main.rs /*rust读取excel文件*/ use cala…

Tomcat 架构

一、Http工作原理 HTTP协议是浏览器与服务器之间的数据传送协议。作为应用层协议,HTTP是基于TCP/IP协议来传递数据的(HTML文件、图片、查询结果等),HTTP协议不涉及数据包(Packet)传输,主要规定了…

本地快速部署谷歌开放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌开放模型Gemma教程(基于WasmEdge) 一、介绍 Gemma二、部署 Gemma2.1 部署工具2.1 部署步骤 三、构建超轻量级 AI 代理四、总结 一、介绍 Gemma Gemma是一系列轻量级、最先进的开放式模型,采用与创建Gemini模型相同的研究和技…

RuoYi-Vue-Plus功能分析-jackson配置

文章目录 前言一、配置文件二、配置类三、注解四、json工具类1. 工具内容2. 使用工具 前言 前端在给我发送请求的时候一般包含三个部分url,header,body。那么就会涉及我们后端如何接收这些请求参数并且我们处理完毕参数后前端又如何接收参数 通过url传…

代码随想录刷题笔记 DAY 37 | 动态规划理论基础 | 斐波那契数 No.509 | 爬楼梯 No.70 | 使用最小花费爬楼梯 No.746

文章目录 Day 3700. 动态规划理论基础01. 斐波那契数&#xff08;No. 509&#xff09;<1> 题目<2> 笔记<3> 代码 02. 爬楼梯&#xff08;No. 70&#xff09;<1> 题目<2> 笔记<3> 代码 03. 使用最小花费爬楼梯&#xff08;No. 746&#xff…

ECMAScript-262 @2023版本中的关键字和保留字

1、什么是标识符&#xff1f; 所谓标识符&#xff0c;就是javascript里的变量、函数、属性或函数参数的名称&#xff0c;可由一个或多个字符组成&#xff0c;当然标识符有命名规范 标识符第一个字符必须是 一个字母、下划线&#xff08;_&#xff09;或美元符号&#xff08;$…

ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案

ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案 文章目录 ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案摘要&#x1f4d1;引言 &#x1f31f;正文&#x1f4da;一、ONLYOFFICE文档概述 &#x1f4ca;二、ONLYOFFI…

【新书推荐】10.2 分支程序设计

稍微复杂一些的程序通常需要做某种条件判断&#xff0c;然后再决定程序的执行流程。当然也可以无条件跳转到程序的另一处地址开始执行。本节我们将详细介绍分支结构的程序设计方法。 针对功能较为复杂的程序&#xff0c;程序开发有一套标准的流程&#xff0c;我们将10.1节中的五…