無論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