1、如何實現優雅地重啟乙個go網路程式呢。主要要解決兩個問題:
程序重啟不需要關閉監聽的埠
既有請求應當完全處理或者超時
2、怎麼實現無縫重啟
1
.不關閉現有連線,正在執行中的程式
2.新的程序啟動並替代舊的程序
3.新的程序接管新的連線
4.連線要隨時響應使用者的請求,當使用者仍在請求舊程序時要保持連線,新使用者因該請求新程序
5 不能出現請求被拒絕的時候
3、實現步驟:
err := endless.
listenandserve
("localhost:4242"
, mux)
只需替換http.listenandserve
和http.listenandservetls
。
它會監聽這些訊號: syscall.sighup, syscall.sigusr1, syscall.sigusr2, syscall.sigint, syscall.sigterm, 和syscall.sigtstp。
(1)通過exec.command fork乙個新的程序,同時繼承當前程序的開啟的檔案(輸入輸出,socket等)
file := netlistener.
file()
// this returns a dup()
path :=
"/path/to/executable"
args :=
string
cmd := exec.
command
(path, args...
)cmd.stdout = os.stdout
cmd.stderr = os.stderr
cmd.extrafiles =
*os.file
err := cmd.
start()
if err !=
nil
(2)子程序初始化
網路程式的啟動**
(3)父程序停止
if gracefulchild
server.
serve
(l)
同時他還提供的如何處理已經正在處理的請求。可以檢視它的文章了解詳細情況。
因此,處理特定的訊號可以實現程式無縫的重啟。
LQH入職第11天 初始化日誌
1 日誌功能 在許多go語言專案中,我們需要乙個好的日誌記錄器能夠提供下面這些功能 1 能夠將事件記錄到檔案中,而不是應用程式控制台。2 日誌切割 能夠根據檔案大小 時間或間隔等來切割日誌檔案。3 支援不同的日誌級別。例如info,debug,error等。4 能夠列印基本資訊,如呼叫檔案 函式名和...
應屆生入職 第10天
今天的太陽格外的大!昨天我自認為自己還是很積極的,跑到那邊工位對不清楚的問題進行詢問,下午又對得到的資料進行核對。excel是個好東西!昨天下班之後組長來找我,詢問了一下我最近的情況,我也和他明說了自己工位的問題,他也知道我乙個人坐這裡有點孤單寂寞冷,脫離大部隊的感覺,還是安慰了我一下,了解了我的工...
第10天 Web伺服器
1.知道長連線和短連線的特點 長連線 連線建立成功以後,可以傳送多次請求和多次響應資料,提高訪問速度,伺服器占用比較多 短連線 每次傳送請求資料之前都需要先建立連線,那麼使用者訪問資料比較慢,伺服器占用的資源比較少,因為資料傳送完成以後服務端就會斷開連線 2.掌握請求報文和響應報文的傳送格式 get...