欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解

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

熱門標簽:評價高的400電話辦理 百度地圖標注后傳給手機 外呼系統顯本地手機號 涿州代理外呼系統 excel地圖標注分布數據 壽光微信地圖標注 外呼系統用什么卡 電話機器人軟件免費 阿克蘇地圖標注

監聽服務的信號,實現平滑啟動,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 模式無法寫入? todo
        n, _ := 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進程間通信--使用信號
  • 詳解Linux進程間通信——使用信號量
  • 詳解Linux多線程使用信號量同步
  • Linux下的信號詳解及捕捉信號
  • linux下基于C語言的信號編程實例
  • Linux線程同步之信號C語言實例
  • linux多線程編程詳解教程(線程通過信號量實現通信代碼)
  • Linux下semop等待信號時出現Interrupted System Call錯誤(EINTR)解決方法
  • 淺談Linux信號機制

標簽:重慶 梅河口 汕頭 欽州 銅川 雞西 吐魯番 蘭州

巨人網絡通訊聲明:本文標題《golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解》,本文關鍵詞  golang,監聽,服務,的,信號,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解》相關的同類信息!
  • 本頁收集關于golang 監聽服務的信號,實現平滑啟動,linux信號說明詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美日韩一区二区在线观看视频 | 日本一区二区在线观看视频| 黑人操日本美女| 久久嫩草精品久久久久| 免费看黄色91| 欧美丰满少妇人妻精品| 538在线一区二区精品国产| 亚洲一级二级在线| 91人妻一区二区| 欧美剧情片在线观看| 亚洲一区在线看| 日本少妇一级片| 精品视频123区在线观看| 亚洲免费电影在线| 中文字幕一二三区| 欧美日韩久久久| 亚洲五码中文字幕| 亚洲啪av永久无码精品放毛片 | 成人av免费在线观看| 黄色香蕉视频在线观看| 国产精品久久久久影院色老大| 成人做爰69片免费看网站| 成人在线观看高清| 亚洲男人电影天堂| 黑人无套内谢中国美女| 欧美久久久久久久久久| 日日摸夜夜添夜夜添亚洲女人| 一级国产黄色片| 精品国产免费一区二区三区四区| 伦理电影国产精品| 日本精品久久久久中文| 国产精品蜜臀av| 99re热这里只有精品视频| 欧美三级韩国三级日本一级| 亚洲成人一区在线| 精品人妻少妇嫩草av无码| 26uuu国产电影一区二区| 国产剧情av麻豆香蕉精品| 美女的奶胸大爽爽大片| 一区二区三区日韩| 香港三级日本三级| 久久久久久久av麻豆果冻| 成人在线综合网| 欧美日韩免费在线视频| 免费在线观看成人| 成人欧美一区二区三区黑人一 | 天天综合网天天综合色| 熟女少妇内射日韩亚洲| 中文字幕一区二区不卡| 91人人澡人人爽| 久久伊人中文字幕| 99久久伊人网影院| 91麻豆精品91久久久久同性| 国产在线不卡一卡二卡三卡四卡| jizz亚洲少妇| 亚洲va欧美va人人爽| 波多野结衣一二三四区| 亚洲精品国产无天堂网2021| 欧美丰满少妇人妻精品| 国产精品日韩精品欧美在线| 制服丝袜av在线| 国产日韩影视精品| 一区二区三区四区影院| 国产日韩精品久久久| 国产探花一区二区三区| 久久免费偷拍视频| 中文字幕一二三区| 久久久久国产精品麻豆ai换脸| 91色.com| 久久久综合网站| xxxx视频在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 国产伦精品一区二区三区88av| 久久久久久久久蜜桃| 中文字幕久久久久久久| 久久久久成人黄色影片| 亚洲一区二区三区三州| 久久久久久久久久久久久女国产乱| 苍井空张开腿实干12次| 国产精品区一区二区三区| 国产精品久久AV无码| 日韩一区日韩二区| 男女做爰猛烈刺激| 亚洲一区二区中文在线| 2014亚洲天堂| 蜜臀av国产精品久久久久| 91成人国产精品| 国产成人免费网站| 欧美大片国产精品| 久久发布国产伦子伦精品| 国产喷白浆一区二区三区| 久久久午夜精品福利内容| 最新成人av在线| 欧美一区二区三区粗大| 午夜激情一区二区| 日本韩国一区二区| 国产精品18久久久久久久网站| 欧美一区二区人人喊爽| 女王人厕视频2ⅴk| 亚洲欧洲日韩综合一区二区| 亚洲精品视频网址| 蜜臀久久久99精品久久久久久| 欧美日韩综合一区| 99视频精品免费视频| 国产亚洲自拍一区| 蜜桃av免费看| 日韩电影免费在线| 欧美二区乱c少妇| 中文字幕欧美视频| 最新不卡av在线| 天天天天天天天天操| 国产麻豆午夜三级精品| 欧美xxxxx牲另类人与| 亚洲图片综合网| 亚洲香肠在线观看| 欧美午夜在线一二页| 99天天综合性| 亚洲天堂福利av| 中文字幕av免费在线观看| 国产精品99久| 国产日本欧美一区二区| 91动漫免费网站| 国产一区二区不卡老阿姨| 精品va天堂亚洲国产| 成人影视免费观看| 日本不卡视频一二三区| 欧美精品丝袜久久久中文字幕| 99精品国产91久久久久久| 中文字幕亚洲在| 在线观看成人毛片| 91污片在线观看| 亚洲综合一二三区| 精品视频123区在线观看| 国产乱淫av麻豆国产免费| 亚洲成av人片在线观看| 欧美猛男男办公室激情| 国产伦精品一区二区三区精品| 午夜影院在线观看欧美| 欧美一区午夜视频在线观看| 中文字幕 亚洲一区| 青青草成人在线观看| 欧美精品一区二区三区一线天视频| 亚洲午夜久久久久久久国产| 国产在线视频一区二区三区| 国产精品免费网站在线观看| 91精品91久久久中77777| 国产亚洲色婷婷久久| 亚洲午夜电影网| 欧美成人vps| 国产美女网站视频| av一区二区不卡| 亚洲午夜久久久久中文字幕久| 欧美一区中文字幕| 国产三级av在线播放| 国产激情视频一区二区三区欧美| 中文字幕第一区| 在线精品视频免费播放| 亚洲麻豆一区二区三区| 美国十次综合导航| 日本一二三不卡| 亚洲小少妇裸体bbw| 欧美午夜不卡视频| 奇米777第四色| 久久精品久久综合| 欧美国产一区二区| 在线观看欧美黄色| 国产又粗又长又爽| 国产真实乱对白精彩久久| 最新国产精品久久精品| 91精品一区二区三区久久久久久| 香蕉视频久久久| 成人永久免费视频| 亚洲18色成人| 国产欧美一区二区精品仙草咪 | 中文字幕免费高清| 成人一道本在线| 亚洲动漫第一页| 久久精品亚洲麻豆av一区二区| 色哟哟国产精品免费观看| 黄色录像a级片| 国产大片一区二区| 亚洲国产成人porn| 日本一区二区视频在线| 欧美日韩在线免费视频| 少妇精品无码一区二区免费视频| av午夜一区麻豆| 久久电影网站中文字幕| 亚洲人成电影网站色mp4| 欧美va亚洲va在线观看蝴蝶网| 成人在线观看免费完整| 亚洲永久无码7777kkk| 成人小视频在线| 日韩av一二三| 亚洲蜜桃精久久久久久久| 久久综合九色欧美综合狠狠 | 亚洲黄网站在线观看| 欧美不卡一区二区| 在线看日本不卡| 中国1级黄色片| 在线观看av中文字幕|