日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解

瀏覽:248日期:2024-04-21 11:57:54
監聽服務的信號,實現平滑啟動,linux信號說明

golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解

package main import ('context''fmt''golang.org/x/sync/errgroup''net/http''os''os/signal''syscall') func main() { g, ctx := errgroup.WithContext(context.Background())fmt.Println('服務啟動start!')addr := ':9091's :=&http.Server{Addr: addr,Handler:http.DefaultServeMux,}g.Go(func() error {http.HandleFunc('/test1', func(writer http.ResponseWriter, request *http.Request) {fmt.Println('tes1')writer.Write([]byte('tes1'))})return s.ListenAndServe()})g.Go(func() error {exit := make(chan os.Signal)//監聽 Ctrl+C 信號signal.Notify(exit, syscall.SIGINT, syscall.SIGTERM)select {case <-exit:fmt.Println('進程已被取消~')return s.Shutdown(ctx)}})err := g.Wait()if err != nil {fmt.Println(err)}fmt.Println('服務啟動成功!')if ctx.Err() !=nil {fmt.Println(ctx.Err())fmt.Println('服務關閉成功!')os.Exit(0)} }

補充:golang http服務實現平滑重啟

看代碼吧~

package main import ( 'context' 'encoding/json' 'fmt' 'math/rand' 'net/http' 'os' 'os/signal' 'time') var logChan = make(chan map[string]interface{}) var requestStatusMap = map[int]bool{} var done = make(chan bool, 1)var quit = make(chan os.Signal, 1) //為什么這樣可以平滑重啟?// 正常情況下是server.ListenAndServe() 這個位置hang住整個進程的// 可以把這個程序看成兩部分,1個是web服務的監聽部分,一個是處理部分, 如果web服務器不開啟了,那么就不能處理新進來的請求了(可以理解為一個帶路的)// 真正讓這個請求斷掉 是因為主進程(main)被kill// 所以平滑重啟的原理就是,先kill掉web服務器,不讓新的請求進來,等現有的全部請求完了,然后結束當前進程func main() { server := newServer() signal.Notify(quit, os.Interrupt) go monitorKill(server, quit) server.ListenAndServe() <-done} func newServer() *http.Server { router := http.NewServeMux() router.HandleFunc('/hello', sayHello) return &http.Server{Addr: ':8262',Handler: router, }} func monitorKill(server *http.Server, quit <-chan os.Signal) { <-quit go shutDown(server) for {if len(requestStatusMap) != 0 { fmt.Println('目前還有進行中的請求,請稍等') time.Sleep(time.Second * 1) continue} else { close(done) break} }} func shutDown(server *http.Server) { if err := server.Shutdown(context.Background()); err != nil {fmt.Println(err) }} func sayHello(w http.ResponseWriter, r *http.Request) { go WriteInfo()//請求寫日志 var uniqueId = GenerateRangeNum(1, 1000) requestStatusMap[uniqueId] = false url := r.URL.Path query := r.URL.RawQuery method := r.Method a := map[string] interface{}{'url' : url,'method' : method,'query' : query,'response': 'hello world!', } logChan<-a w.Write([]byte('hello world!')) time.Sleep(time.Second * 10) delete(requestStatusMap, uniqueId)} func WriteInfo() { info := <-logChan fileName := '/tmp/weekhomework.log' _, err := os.Stat(fileName) if err != nil || os.IsNotExist(err) {_, _ = os.Create(fileName) } f,err := os.OpenFile(fileName, os.O_WRONLY, 0644) defer f.Close() if err !=nil {fmt.Println(err.Error()) } else {//追加寫入 為什么O_APPEND 模式無法寫入? todon, _ := f.Seek(0, 2)infostr, _ := json.Marshal(info)_,err=f.WriteAt([]byte(string(infostr) +'n'), n) }} func GenerateRangeNum(min int, max int) int { if min == max {return min } rand.Seed(time.Now().Unix()) randNum := rand.Intn(max-min) + min return randNum}主要思路:

對于每個請求都做記錄,處理完成之后做刪除。 用一個協程去監控中斷信號,有中斷信號先把http服務關閉。

如果這個時候還有請求沒有處理完,那么就輪訓等待,等全部處理完那么就 發出終止信號結束main進程的執行

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Linux系統
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲a级精品| 亚洲视频二区| 亚洲欧美在线综合| 亚洲在线一区| 欧美精品激情| 亚洲性图久久| 久久精品青草| 日韩深夜视频| 播放一区二区| 91精品啪在线观看国产18| 中文字幕人成乱码在线观看| 欧美国产中文高清| 国产精品一区二区三区av| 欧美日韩夜夜| 国产精品久久久久久久久久妞妞| 欧美日本精品| 欧美成a人片免费观看久久五月天| 国产精品亚洲综合久久| 欧美精品99| 精品一区二区三区中文字幕| 精品中文字幕一区二区三区 | 欧美韩日一区| 日韩在线短视频| 久久精品国产www456c0m| 久久伦理在线| 黑丝美女一区二区| 国产一区二区三区久久| 日韩在线观看| 一本一道久久a久久精品蜜桃| 亚洲免费网址| 日韩国产欧美三级| 久久久久黄色| 激情亚洲影院在线观看| 日韩中文字幕不卡| 欧美亚洲一区二区三区| 精品在线网站观看| 欧美日韩国产观看视频| 欧美成人高清| 亚洲精品美女91| 久久av网站| 欧美激情 亚洲a∨综合| 97国产成人高清在线观看| 欧美不卡在线| 日韩不卡一区二区| 国产suv精品一区| 亚洲精品99| 欧美日韩xxxx| 涩涩av在线| 99视频精品| 国产精品美女久久久久久不卡| 成人污污视频| 国产精品视区| 久久爱www成人| 亚洲香蕉网站| 日韩精品久久理论片| 国产精品麻豆成人av电影艾秋 | 正在播放日韩精品| 国产精品色网| 卡一精品卡二卡三网站乱码| 国产主播一区| 欧美在线精品一区| 日韩精品诱惑一区?区三区| 日韩国产在线不卡视频| 神马久久午夜| 日韩三级久久| 日韩在线短视频| 亚洲另类视频| 色偷偷偷在线视频播放| 国产精品美女久久久| 国产精品白浆| 国产精品毛片| 亚洲免费福利| 日韩高清二区| 欧美成人亚洲| 麻豆成人在线观看| 日韩在线a电影| 日本欧美不卡| 国产精品多人| 日韩中文字幕麻豆| 成人精品天堂一区二区三区| 91国内精品| 9国产精品视频| 国产精品久久观看| 亚洲精品黄色| 婷婷综合社区| 成人在线丰满少妇av| 青草综合视频| 国产婷婷精品| 久久国产影院| 欧美激情麻豆| 亚洲在线久久| 亚洲二区免费| 国产精品13p| 国产精品自拍区| 亚洲理论在线| 午夜久久美女| 四虎影视精品| 国产精品亚洲欧美一级在线 | 精品久久久久久久| 日韩午夜av| 久久精品99久久久| 久久久精品午夜少妇| 中文字幕人成乱码在线观看| 免费一区二区视频| 你懂的亚洲视频| 精品一区二区男人吃奶| 成人va天堂| 国内精品福利| 久久精品播放| 久久国产成人午夜av影院宅| 欧美三区不卡| 精品一区二区三区四区五区| 群体交乱之放荡娇妻一区二区| 国产精久久一区二区| 国产福利片在线观看| 亚洲欧洲日本mm| 欧美aa在线观看| 久久久免费人体| 久久国产精品免费一区二区三区| 中文字幕亚洲影视| 麻豆亚洲精品| 久色成人在线| 午夜在线一区| 男女精品网站| 丝袜美腿高跟呻吟高潮一区| 伊人久久亚洲影院| 亚洲福利久久| 中文字幕在线官网| 高潮久久久久久久久久久久久久| 另类综合日韩欧美亚洲| 免费视频一区二区三区在线观看| 欧美精品观看| 久久av国产紧身裤| 久久精品国产亚洲aⅴ| 国产剧情一区| 麻豆视频观看网址久久| 久久精品色播| 国产999精品在线观看| 国语对白精品一区二区| 日产精品一区二区| 偷拍精品精品一区二区三区| 亚洲h色精品| 日韩精品免费一区二区在线观看| 国产剧情在线观看一区| 麻豆国产欧美一区二区三区| 成人在线免费观看网站| 欧美13videosex性极品| 亚洲高清不卡| 免费中文字幕日韩欧美| 蜜桃视频在线观看一区二区| 亚洲精品福利| 国产欧美一区二区三区精品观看| 91青青国产在线观看精品| 成人看片网站| 亚洲永久字幕| 玖玖玖国产精品| 日韩激情综合| 欧美日韩 国产精品| 老鸭窝一区二区久久精品| 91一区二区| 午夜国产精品视频| 日韩一区二区三区四区五区| 国产图片一区| 一区二区精品伦理...| 激情综合网五月| 免费视频最近日韩| 日本99精品| 国产精品高颜值在线观看| 99久久婷婷这里只有精品| 久久成人一区| 国产精品综合色区在线观看| 91日韩欧美| 蜜桃精品在线| 2023国产精品久久久精品双| 亚洲乱码久久| 久久精品一区| 欧美特黄a级高清免费大片a级| 日本不卡一区二区| 国产一区二区三区黄网站| av一区二区高清| 日韩精品三级| 日韩欧美三级| 最新国产精品久久久| 久久精品人人| 女人天堂亚洲aⅴ在线观看| 欧美日韩调教| 久久美女精品| 亚洲va久久久噜噜噜久久| 精品视频在线观看网站| 一区在线视频观看| 国产精品对白| 午夜欧美在线| 麻豆精品一区二区综合av| 性欧美69xoxoxoxo| 麻豆精品在线视频| 久久亚洲欧美| 欧美国产美女| 日本不卡在线视频| 久久国产欧美| 国产乱码精品一区二区三区亚洲人 |