關於客戶端Launcher的設計和實現的一些思路

2021-08-14 02:09:19 字數 2062 閱讀 2875

近期因為公司的產品需要乙個launcher來實現更新版本,寫了一段時間算是完工了,但是其中也發現了不少的問題,在此把實現思路和一些在開發過程中遇到的一些問題寫出來,有需要的朋友可以用於參考。

大致流程

先大致的介紹一下更新的流程和實現思路,在後面會詳細的進行討論。

以上是更新的大致流程,雖然看起來流程十分簡單,但是要實現起來還是有十分多的細節要注意。

檢測版本

接下來為了檢測是否需要被更新,需要獲取最新的客戶端版本號,和當前的版本號進行對比,若發現版本號不一致即為需要更新。

關於如何獲取最新版本號的方法,不了解socket通訊的朋友,如果公司沒有後端開發,這一步對你來可能就有些困難了,你或許需要從服務端的搭建開始了解,如果有後端的話,可以讓後端提供獲取資料的介面,通過相應的協議和url呼叫api即可,雖然也需要了解一定的網路通訊,但是無疑比從服務端開始搭建容易太多了,況且幾乎每種語言都有相應的socket庫,只需要了解庫的用法即可,本篇主要講launcher的實現,所以在此不專門討論。

關於獲取當前客戶端的版本號,方法有很多,比如說建立乙個專門用於儲存版本號的version.ini檔案,也可以修改客戶端執行程式的版本號屬性,具體採用哪種方法,可以根據你的喜好而定。

檢測客戶端程序

更新前,需要對客戶端程序進行檢測,因為客戶端如果在啟動中,會造成檔案被占用無法更新的情況,所以需要先檢測當前程序中是否存在客戶端程序,提示使用者關閉客戶端後再進行更新。

檢索需更新檔案

確認了版本差異後,就需要檢索出哪些檔案需要更新,比較普遍的方法是每個版本都製作乙份檔案對照表,

檔案對照表中記錄著每個檔案的相對路徑和檔名,以及檔案特徵碼等資訊,檔案特徵碼可以採用目前使用比較廣泛md5。

所以在此之前,需要先開發乙個檔案對照表的程式,遍歷客戶端的所有檔案,生成對應相對檔名和檔案特徵碼的**,再把檔案對照表資料上傳到資料庫中,每乙個版本都需要生成乙份對應的檔案對照表。

ps:其中這裡有些朋友可能會有些疑問,覺得獲取當前檔案對照表是否太過於麻煩了,直接獲取當前客戶端的路徑,對檔案進行遍歷檢索不行嗎?雖然說這種方法的確是可行的,但是卻有著很大的風險,如果使用者把客戶端目錄放在了某個驅動器的根目錄,那麼如果使用這種方法,就會自動把整個驅動器的檔案當做客戶端檔案進行檢索,其結果就會是直接刪除掉整個驅動器的其餘檔案,只留下客戶端檔案,不得不說這是相當可怕的事情。

ps:慚愧的是一開始對伺服器的接受請求和防禦ip攻擊的機制並不熟悉,採用了不斷開闢執行緒請求range為10240範圍的內容的方式,進行大量的請求,發生了伺服器誤認為是ip攻擊的烏龍。

檔案完整性校驗

在整體更新完成後,一般需要進行乙個檔案完整性校驗,即為根據檔案對照表中的資訊,遍歷表中檔案,校驗檔案特徵碼是否匹配,此項檢測通過後即可啟動客戶端。

關於launcher的自更新

根據需求的不同,有些launcher除了用於更新外,還肩負著展示產品資訊的任務,所以有的時候會有對launcher進行更新的要求,讓launcher在程式內自更新是不大現實的,因為會有檔案占用問題,所以會需要乙個外接的更新程式。

launcher的自更新方式用的比較多的是額外帶有乙個update執行程式,這個執行程式的功能和launcher有些相似,整體流程也可以參照launcher的更新機制,只是乙個的作用是用於更新客戶端,update的作用是用於更新launcher,若update程式需要更新,可以由launcher完成。

更新的整體流程大約為:

檢測版本需要更新。

update程式完成更新後,開啟launcher並關閉自身。

launcher檢測版本為最新版後,刪除殘留的update程式。

整體的更新流程圖

來自《黑暗之魂3》。

Oracle客戶端NLS LANG引數的設定詳解

我們知道,oracle客戶端語言支援可以通過nls lang引數的設定來完成,不同的系統平台上nls lang引數的設定會有所不同。本文我們首先介紹了nls lang引數的構成,然後介紹了oracle客戶端nls lang引數在windows平台和unix平台上的設定,現在我們開始介紹這一部分內容。...

關於胖客戶端

目前his系統由於業務複雜,要進行大量的運算,而且his系統在執行一段時間後,資料量激增,資料庫占用空間增長很快,導致his投入執行一兩年後,反應速度急遽下降,在進行乙個簡單的儲存或刪除業務時都要花較長時間,甚至讓使用的醫務人員也難以忍受,這時就應該考慮採用胖客戶端了。所謂胖客戶端,這裡是指將常用的...

關於胖客戶端

目前his系統由於業務複雜,要進行大量的運算,而且his系統在執行一段時間後,資料量激增,資料庫占用空間增長很快,導致his投入執行一兩年後,反應速度急遽下降,在進行乙個簡單的儲存或刪除業務時都要花較長時間,甚至讓使用的醫務人員也難以忍受,這時就應該考慮採用胖客戶端了。所謂胖客戶端,這裡是指將常用的...