遠端發布的設計和實現

2021-08-30 01:16:21 字數 2430 閱讀 3790

遠端發布的設計和實現

在實施門戶部署時,部分客戶會有內外網都要的需求,即內容資訊維護在內網完成,內網使用者可以通過內網直接訪問門戶,但同時需要加門戶發布到外網,供internet

上使用者訪問,內外網的資訊需要保持同步。

第一步需要將動態的門戶頁面全部發布成靜態html

頁面(可參考我的另外一篇日誌《門戶站點靜態發布的設計與實現);

第二步還需要將第一步發布出來的靜態html

、css

檔案等遠超發布到外網伺服器,同時外網訪問出於效能考慮,可能需要做負載均衡,還需要遠超發布時能支援發布至多台外網伺服器上。

以下具體講述下第二步遠端發布的設計思路和具體實現。主要將借助開源組織apache

的common-net.jar

包的ftpclient類。

一、

編寫遠超發布配置資訊檔案

配置資訊需要包含有外網伺服器的ftp

index,articlelist

二、

解析配置檔案,建立ftp

連線

根據上面配置檔案ftpserver

的資訊,可建立乙個ftpclient

privatevoidconnect2ftpserver(string url, string user, string pwd)throwssocketexception, ioexception

this.

remoteroot

= ftp

.printworkingdirectory(); }

三、

上傳檔案(夾)

建立了ftp連線後,就可以利用該連線進行檔案的ftp上傳操作。這裡有幾點需要注意:

1、按本地上傳的資料夾的目錄結構,在外網伺服器上對應的資料夾下建立一模一樣的目錄結構。

/*** 在上傳資料夾的過程中,如果伺服器的目標目錄中和上傳資料夾的目錄有區別則建立各級目錄。

*@param

remotedir

*@param

relativepath

*/privatevoidmakedirectory(string remotedir, string relativepath)

ftp]);

.changeworkingdirectory(dir[i

} }catch(exception e) }

2、過濾掉無需重複上傳的檔案。如何過濾規則可以根據需要制定。比如,配置檔案裡可加入

index,articlelist的匹配配置,表示檔名包含index或者articlelist字樣的檔案每次都要上傳;還可以根據檔案的最後修改時間來判斷是否需要上傳該檔案(比如三小時內修改過的檔案上傳,其餘不上傳,可結合第四步的定時機制)。

指定好了上傳目錄,上傳檔案很簡單,只需簡單的呼叫ftpclinet的storefile方法。可參考下面**:

string filename = file.getname(); // 本地檔名

fileinputstream input =newfileinputstream(file);

ftp.storefile(filename, input);

四、

定時遠端發布到外網伺服器

通過上面三個步驟,已經可以將內網伺服器的檔案順利發布至外網伺服器,但是我們還是需要做一定的優化。

首先什麼時候觸發遠端發布。為了保證內外網資訊實時同步,最理想的方式就是內網內容一更新,即觸發遠端發布,將更新內容發布至外網伺服器。但這樣導致的效能問題非常嚴重。因為存在多個內容維護的管理員,可能每個人都在做遠端發布,這就需要多個ftp連線,非常耗費資源,且相互間還會影響彼此的上傳速度。

針對上面問題,使用定時遠端發布可以帶來比較好的效能提公升。這需要在本地(即內網伺服器)上建立乙個守護程序,由它不停的檢測本地需要上傳的目錄,發現有更新且到達定時時間(比如15分鐘),則啟動遠端發布。否則不啟動。這樣可保證始終只有乙個ftp連線,多個管理員同時更新內容不會相互影響彼此上傳速度。只不過這樣一定程度上了犧牲內容的實時更新(會稍微有所延遲)。

redis 發布和訂閱實現

參考文獻 15天玩轉redis 第九篇 發布 訂閱模式 redis設計與實現 psubscribe publish pubsub punsubscribe subscribe unsubscribe 接下來一一簡述下這個6個命令的相關使用。subscribe channel channel 訂閱給定...

門戶站點靜態發布的設計與實現

門戶站點靜態發布的設計與實現 之前寫過一片文章講述了門戶首頁靜態發布解決方案 訪問 1 門戶首頁 2 二級頁面 或稱欄目頁 3 頁面 或稱文章頁 4 全文檢索結果展示頁面 5 控制台管理頁面 其中需要前面三種型別的頁面是需要發布成靜態的,另外發布還分兩種情況 1 整站發布 從首頁開始發布整個站點。2...

spinlock的設計和實現

在linux的核心中,spin lock用在多處理器環境中。當乙個cpu訪問乙個臨界資源 critical section 的時候,需要預先取得spin lock,如果取不到的話,它就在空迴圈 等待,直到另外的cpu釋放spin lock。由於涉及到多個處理器,spin lock的效率非常重要。因為...