最近被後台日誌弄的很煩,看到有個專案簡簡單單,又能滿足需要,順便試下看看效果,做下記錄。只是記錄下一部分內容,就不全部讀了,關於原始碼可以去
websocket 是 html5 開始提供的一種在單個 tcp 連線上進行全雙工通訊的協議。// websocket客戶端
type client struct
// 客戶端管理
type clientmanager struct
websocket 使得客戶端和伺服器之間的資料交換變得更加簡單,允許服務端主動向客戶端推送資料。在 websocket api 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線,並進行雙向資料傳輸。
在 websocket api 中,瀏覽器和伺服器只需要做乙個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。
程式使用管道作為通訊基礎
clients 用來儲存當前全部的websocket
broadcast 作為廣播使用的管道,當收到訊息,向所有的clients中的websocket進行傳輸資訊
register 當新的鏈結建立,將client指標放入註冊管道
unregister 當鏈結斷開,將斷開的鏈結物件放入取消管道
client結構體內的send管道,當broadcast收到,將資訊發到每個client的send管道中
使用select-case進行管道的資料處理,外部加乙個for迴圈保持輪詢的狀態。func (manager *clientmanager) start()
}()for
case message := <-manager.broadcast:
for conn := range manager.clients }}
}}
這個是在每個websocket啟動的時候使用,每個socket保持乙個for迴圈,使用defer用於關閉操作,當for被打斷(即關閉網頁之類的操作),socket被關閉,則會插入到取消管道中,clients鍵值對會刪除這個連線的資訊。func (c *client) write() ()
for
c.socket.write(message)}}
}
通過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方法是以唯讀的方式讀取資料
可以將檔案讀取的起點設定到某個位置,在seelog中,將讀取起點設定到檔案末尾,當檔案的大小發生變化,則檔案從上個起點開始讀取檔案內容file, err := os.open(filepath)
func open(name string) (*file, error)
_, 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匯入表,匯出表...