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

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

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

瀏覽:252日期: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久久,三上悠亚国产精品一区二区三区
日本三级亚洲精品| 模特精品在线| 亚洲在线观看| 色老板在线视频一区二区| 久久一区国产| 日韩精品电影| 天堂av在线一区| 国产欧美高清视频在线| 91日韩在线| 日韩一区欧美二区| 欧美日韩午夜电影网| 精品99久久| 视频在线观看一区| 一区二区国产精品| 欧美xxxx性| 国产一区导航| 日韩欧美二区| 激情欧美一区| 视频一区在线播放| 国产字幕视频一区二区| 欧美专区18| 伊人www22综合色| 亚洲欧洲午夜| 欧美91在线| 日韩视频不卡| 首页欧美精品中文字幕| 国产精品嫩模av在线| av在线资源| 日韩.com| 亚洲日本三级| 精品日韩视频| 亚洲精选成人| 久久亚洲资源中文字| 亚洲视频www| 国产精品不卡| 欧美亚洲人成在线| 日韩一级欧洲| 亚洲女同av| 国产精品黄网站| 亚洲18在线| 99国产精品久久久久久久成人热| 国产精品4hu.www| 日本亚洲三级在线| 国内自拍视频一区二区三区| 日韩精品一级二级| 欧美成人国产| 美女av在线免费看| 国产毛片一区二区三区| 亚洲午夜国产成人| 亚洲一区日韩| 精品一区三区| 偷拍精品精品一区二区三区| 国产极品嫩模在线观看91精品| 人人精品人人爱| 午夜国产欧美理论在线播放| av资源中文在线| 久久精品二区亚洲w码| 久久久国产精品入口麻豆| 中文字幕亚洲影视| 亚洲一区二区三区久久久| 欧美日韩国产一区二区三区不卡| 国产一二在线播放| 色乱码一区二区三区网站| 成人亚洲精品| 99精品综合| 亚洲视频播放| 日韩中出av| 国产精品欧美三级在线观看 | 视频一区日韩精品| 国产一区 二区| 国产一区二区三区四区大秀| 国产精品97| 玖玖玖国产精品| 国产欧美日韩精品高清二区综合区 | 日韩一区二区三区免费播放| 综合日韩av| 亚洲精品一区二区在线看| 免费视频亚洲| 97精品国产99久久久久久免费| 桃色一区二区| 国产精品天天看天天狠| 偷拍精品精品一区二区三区| 日韩二区三区在线观看| 精精国产xxxx视频在线野外| 日本久久一区| 免费欧美一区| 国产精品99久久免费| 国产一在线精品一区在线观看| 视频一区二区中文字幕| 精品国产精品久久一区免费式| 91一区二区| 国产欧美日本| 在线成人直播| 精品一区不卡| 日本亚洲视频在线| 国产毛片一区| 成人va天堂| 日韩精品欧美| 91精品久久久久久久久久不卡| 亚洲精品进入| 美女被久久久| 国产精品欧美三级在线观看| 成人羞羞视频播放网站| 热久久久久久| 亚洲另类视频| 伊人久久婷婷| 999久久久91| 国产精品一区二区精品视频观看| 日韩高清中文字幕一区二区| 亚洲精品韩国| 国产精品久久观看| 韩国精品主播一区二区在线观看| www.com.cn成人| www成人在线视频| 图片区亚洲欧美小说区| 综合色一区二区| 亚洲精品自拍| 日韩精品视频一区二区三区| 香蕉精品视频在线观看| 日韩视频一区| 久久久久免费| 91亚洲人成网污www| 午夜精品成人av| 日韩精品水蜜桃| 日韩黄色av| 亚洲免费资源| 免费成人在线观看| 亚洲日本三级| 日韩精品国产精品| 欧美一区=区三区| 欧美另类中文字幕| 国产剧情在线观看一区| 国产精品久久久一区二区| 久久在线91| av资源亚洲| 久久精品导航| 亚洲一区亚洲| 亚洲精品在线二区| 国产美女视频一区二区| 精品色999| 亚洲国产欧美日本视频| 99久久亚洲精品蜜臀| 亚洲免费影院| 日韩高清电影一区| 欧美网站在线| 日韩精选在线| 精品国产乱码久久久| 久久久久国产精品一区三寸| 久久高清国产| 国产亚洲高清一区| 捆绑调教日本一区二区三区| 亚洲精品97| 天堂va在线高清一区| 国产精品极品在线观看| 日韩免费在线| 国产一区二区三区四区| 91精品国产福利在线观看麻豆| 亚洲天堂免费| 欧美91在线| 视频一区二区国产| 欧美午夜精品一区二区三区电影| 国产日产一区| 野花国产精品入口| 欧美好骚综合网| 精品久久中文| 国产不卡精品在线| 欧美极品中文字幕| 日韩不卡一区二区三区| 精品一区三区| 日韩专区精品| 亚洲一区二区三区中文字幕在线观看| 久久免费福利| 国产精品久久久久久久久久齐齐| 久久国际精品| 亲子伦视频一区二区三区| 蜜臀久久精品| 国产精品白浆| 日韩在线黄色| 亚洲一二三区视频| 中文在线日韩| 伊人久久亚洲美女图片| 国产精品成人一区二区不卡| 日韩专区在线视频| 精品美女视频| 久久亚洲国产精品尤物| 麻豆免费精品视频| 亚洲福利专区| 国产精品扒开腿做爽爽爽软件| 精品欧美一区二区三区在线观看| 亚洲免费成人av在线| 色偷偷偷在线视频播放| 五月国产精品| 久久美女性网| 国产精品成人自拍| 午夜久久黄色| 精品一区二区三区视频在线播放| 久久亚洲欧洲| 成人国产综合| 天堂久久av| 欧美日韩在线二区|