Daemon 生命週期
最後更新
本頁說明 Start、Stop、Close 在 server 模式與 client 模式下各自的行為。
生命週期
| 方法 | Server 模式 | Client 模式 |
|---|---|---|
Start() |
不阻塞。重新探測,若另一個 daemon 回應則回傳 ErrAlreadyRunning;移除殘留 socket 檔、開始監聽並在 goroutine 中 accept。監聽中再次呼叫不做事 |
不做事 |
Stop() |
關閉 listener、等待 accept 迴圈、關閉所有開啟的連線、等待連線 goroutine | 不做事 |
Close() |
Stop() 後 Store.Close(),錯誤合併回傳 |
關閉閒置連線 |
Mode() / Socket() |
ModeServer / socket 路徑 |
ModeClient / socket 路徑 |
Store() |
底層 *store.Store |
nil |
Server 模式的 Daemon 在行程內分派呼叫,因此在 Start() 前自己的方法就能使用。Stop() 必須關閉存活連線,否則 client 連線池的閒置連線會讓 serve() 一直卡在 readFrame,Stop() 永遠回不來。
Server process 結束後 client 不會接手;它的呼叫會以撥號錯誤失敗,直到新的 daemon.New 選出新的 server。