seelog原始碼閱讀 筆記

2021-09-13 01:52:37 字數 2298 閱讀 3121

最近被後台日誌弄的很煩,看到有個專案簡簡單單,又能滿足需要,順便試下看看效果,做下記錄。只是記錄下一部分內容,就不全部讀了,關於原始碼可以去

//  websocket客戶端

type client struct

// 客戶端管理

type clientmanager struct

websocket 是 html5 開始提供的一種在單個 tcp 連線上進行全雙工通訊的協議。

websocket 使得客戶端和伺服器之間的資料交換變得更加簡單,允許服務端主動向客戶端推送資料。在 websocket api 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線,並進行雙向資料傳輸。

在 websocket api 中,瀏覽器和伺服器只需要做乙個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。

程式使用管道作為通訊基礎

clients 用來儲存當前全部的websocket

broadcast 作為廣播使用的管道,當收到訊息,向所有的clients中的websocket進行傳輸資訊

register 當新的鏈結建立,將client指標放入註冊管道

unregister 當鏈結斷開,將斷開的鏈結物件放入取消管道

client結構體內的send管道,當broadcast收到,將資訊發到每個client的send管道中

func (manager *clientmanager) start() 

}()for

case message := <-manager.broadcast:

for conn := range manager.clients }}

}}

使用select-case進行管道的資料處理,外部加乙個for迴圈保持輪詢的狀態。

func (c *client) write() ()

for

c.socket.write(message)}}

}

這個是在每個websocket啟動的時候使用,每個socket保持乙個for迴圈,使用defer用於關閉操作,當for被打斷(即關閉網頁之類的操作),socket被關閉,則會插入到取消管道中,clients鍵值對會刪除這個連線的資訊。

通過os.stat獲取檔案資訊,返回值為fileinfo的介面

fileinfo, err = os.stat(filepath)

func (f *file) stat() (fileinfo, error)

type fileinfo inte***ce // underlying data source (can return nil) 基礎資料來源(可以返回nil)

}

獲取當前的檔案的截止位置

offset := fileinfo.size()
獲取新的檔案大小,然後根據檔案大小和之前的區別,構建乙個新的byte陣列,大小為新的位元組數減去舊的位元組數

msg := make(byte, newoffset-offset)
使用open方法開啟乙個檔案,open方法是以唯讀的方式讀取資料

file, err := os.open(filepath)

func open(name string) (*file, error)

可以將檔案讀取的起點設定到某個位置,在seelog中,將讀取起點設定到檔案末尾,當檔案的大小發生變化,則檔案從上個起點開始讀取檔案內容

_, err = file.seek(offset, 0)

func (f *file) seek(offset int64, whence int) (ret int64, err error)

whence 存在3個引數

0:檔案頭的絕對位置偏移offset的距離

1:檔案的相對位置,即當前位置偏移offset的距離

2:檔案末尾的絕對位置偏移offset的距離

msg是之前構造的位元組陣列,將新增的內容讀取到位元組陣列中

_, err = file.read(msg)
使用管道作為訊息傳輸的方式,manager在這裡是乙個全域性的manager,當管道收到訊息,就列印處理

manager.broadcast <- msg
最後記得將檔案關閉,否則下次開啟會出錯

file.close()

閱讀筆記 fsnotify原始碼閱讀

fsnotify的github位址是 fsnotify是乙個資料夾監控應用。可以使用建立乙個watcher來對某個資料夾進行監控 檔案目錄很簡單,實際就兩個程式檔案,fsnotify.go 和 各平台的fsnotify go 後乙個檔案是各個不同平台的實現 example test.go中給的是最簡...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Detours 原始碼閱讀筆記

detour庫 1.原始碼 detour庫很小,直接編譯成lib比較好,在用到的 中做靜態鏈結。detours 3.0加入的新的功能 支援x64的api hook,包括 amd64 和 ia64兩套 支援所有的windows處理器 包括arm 不再依賴detoured.dll 列舉pe匯入表,匯出表...