LQH入職第10天 go伺服器程序無縫重啟

2021-10-06 13:07:39 字數 1589 閱讀 1176

1、如何實現優雅地重啟乙個go網路程式呢。主要要解決兩個問題:

程序重啟不需要關閉監聽的埠

既有請求應當完全處理或者超時

2、怎麼實現無縫重啟

1

.不關閉現有連線,正在執行中的程式

2.新的程序啟動並替代舊的程序

3.新的程序接管新的連線

4.連線要隨時響應使用者的請求,當使用者仍在請求舊程序時要保持連線,新使用者因該請求新程序

5 不能出現請求被拒絕的時候

3、實現步驟:

err := endless.

listenandserve

("localhost:4242"

, mux)

只需替換http.listenandservehttp.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...