需要把線上的access日誌傳送到另乙個程式接收
開始想著用python實現,雖然python也有實現類似tail -f的方式,但太麻煩,而且效率也有折扣
偶然發現了shell可以實現網路client,並且只用幾行**就可以實現
先上**:
trap "exec 8<&-;exec 8>&-" 0
file='/data/nginx/llogs/access.log'
exec 8<>/dev/tcp/10.3.0.200/9001
tail -f "$file" | grep --line-buffered "sid">&8
超級簡單,實際處理的邏輯的**就2行以下是**說明:
第一行主要是捕獲程式退出狀態,退出後關閉連線
第二行定義日誌檔案
第三行建立網路連線,linux有個特殊的檔案/dev/(udp|tcp)/ip/port
把這個檔案繫結到乙個檔案描述符上即可建立對應的網路連線,檔案描述符大於3即可
第四行傳送資料到這個建立好的通道中
因為grep會有緩衝區,預設等緩衝區滿了後才會輸出資料,因此必須加上--line-buffered引數,使用行緩衝
不然server端收到的資料會有斷行。
這種agent超級簡單功能效能也不錯但有個弊端
agent和server建立通道後,若server掛了,那麼agent通道斷開就也掛了,程式就會退出(tcp client有這個問題,upd沒有)
或是網路不好也可能導致agent退出(我這次沒有這個問題都是光纖網際網路絡)
所以需要有對應的監控程式檢測agent,異常時自動重啟,或者如果網路質量不錯的話考慮使用udp
瘦客戶端 胖客戶端 智慧型客戶端
胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...
胖客戶端 瘦客戶端和富客戶端
以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...
tcp網路客戶端程式
tcp client.c include include include include include include include include define portnumber 3333 int main int argc,char argv 使用hostname查詢host名字 if ...