欧美阿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>
    蜜臀av国产精品久久久久| 日本vs亚洲vs韩国一区三区| 国内欧美视频一区二区| 无码人妻精品一区二区三| 色94色欧美sute亚洲线路一ni | 狠狠色狠狠色综合| 新91视频在线观看| 日韩一区二区三免费高清| 午夜精品一区二区三区电影天堂 | 中文字幕精品三区| 韩国视频一区二区| 少妇无套高潮一二三区| 日韩免费一区二区三区在线播放| 天天综合日日夜夜精品| 大乳护士喂奶hd| 欧美高清你懂得| 水蜜桃久久夜色精品一区的特点| 午夜剧场免费看| 欧美一区二区性放荡片| 日韩精品一级二级| 少妇光屁股影院| 欧美videos中文字幕| 乱一区二区av| 久久九九影视网| 亚洲444eee在线观看| 成人免费视频国产免费观看| 欧美一卡二卡在线| 日本va欧美va精品发布| 在线免费看黄视频| 不卡在线视频中文字幕| 粉嫩aⅴ一区二区三区四区| 我要看黄色一级片| 中文字幕中文字幕一区| 91小视频免费看| 欧美精品粉嫩高潮一区二区| 日韩国产精品久久| 亚洲国产av一区| 中文字幕欧美激情| 91视频你懂的| 欧美一区二区在线视频| 久久99九九99精品| 亚洲伦理一区二区三区| 一区二区三区日韩精品视频| av免费观看不卡| 精品粉嫩超白一线天av| 高清在线不卡av| 欧美日韩亚洲综合| 蜜芽一区二区三区| 中日韩一级黄色片| 亚洲一区二区三区三| www.自拍偷拍| 国产精品人成在线观看免费 | 91精品久久久久久久91蜜桃 | 污污的视频在线免费观看| 欧美综合亚洲图片综合区| 毛片av一区二区| 91日韩一区二区三区| 中文字幕91视频| 日韩欧美一卡二卡| 亚洲成av人片观看| 91蜜桃网址入口| www日韩在线| 好吊一区二区三区视频| аⅴ天堂中文在线网| 欧美一区二区三区喷汁尤物| 激情图片小说一区| 中文字幕第一区综合| 日本中文字幕精品| 久久蜜桃香蕉精品一区二区三区| 国产91精品露脸国语对白| 欧美日韩国产123区| 国模套图日韩精品一区二区| 欧洲生活片亚洲生活在线观看| 日本中文字幕一区| jizz亚洲少妇| 日韩 欧美一区二区三区| 91久久久久久久久久久久久久| 亚洲午夜激情网站| 三上悠亚作品在线观看| 日日夜夜免费精品| 一本色道久久综合亚洲aⅴ蜜桃| 男人的天堂久久精品| 日韩一区二区三区四区在线| 日本一区中文字幕| 日本大香伊一区二区三区| 久久不见久久见中文字幕免费| 色综合久久精品| 九九久久精品视频| 欧美电影在线免费观看| 粉嫩av一区二区三区| 精品国产免费一区二区三区四区 | 999精品在线视频| 日韩电影免费在线看| 色狠狠一区二区| 国产一区亚洲一区| 6080亚洲精品一区二区| 波多野结衣亚洲| 久久久www免费人成精品| 日韩aaaaa| 亚洲综合色区另类av| 免费中文字幕日韩| 精品亚洲成a人| 日韩一卡二卡三卡国产欧美| 国产老头和老头xxxx×| 国产精品三级久久久久三级| 久久久久亚洲av成人无码电影| 亚洲一级二级三级在线免费观看| 欧美黑人性猛交xxx| 国产一区视频在线看| 日韩欧美亚洲另类制服综合在线| 国产裸体视频网站| 日韩久久一区二区| 午夜剧场免费在线观看| 国产在线精品免费av| 亚洲精品在线免费播放| 亚洲成人日韩在线| 丝袜美腿一区二区三区| 欧美精品日韩精品| 中国男女全黄大片| 一区二区免费视频| 欧美综合天天夜夜久久| 99国产精品视频免费观看| 国产精品狼人久久影院观看方式| 在线观看日本黄色| 国内精品视频666| 久久久综合精品| 精品无码在线观看| 久久99国产精品免费网站| 精品国产91亚洲一区二区三区婷婷 | 91精品国产综合久久久蜜臀粉嫩 | 亚洲成人精品在线播放| 一区二区三区资源| 欧美伊人久久大香线蕉综合69| av亚洲精华国产精华精华| 亚洲欧洲日韩在线| 一本大道av伊人久久综合| www.一区二区| 亚洲欧美电影院| 欧美性感一区二区三区| 乳色吐息在线观看| 亚洲高清免费观看高清完整版在线观看 | 欧美电影免费提供在线观看| av网站有哪些| 久久er精品视频| 国产亚洲一区字幕| 波多野结衣欲乱| 大胆亚洲人体视频| 亚洲图片另类小说| 欧美日韩亚洲综合在线 | 国产精品成人免费| 懂色av蜜臀av粉嫩av永久| 国产精品一品二品| 亚洲欧洲三级电影| 欧美亚洲一区三区| 亚洲av无码一区二区三区观看 | 色综合中文综合网| 激情五月激情综合网| 久久综合九色综合欧美98| 日本二区在线观看| 国产成人免费在线视频| 综合久久久久久| 欧美日韩视频不卡| 三级黄色片网站| 国内精品久久久久影院一蜜桃| 国产人成一区二区三区影院| 极品盗摄国产盗摄合集| 一区二区在线免费观看视频| 调教+趴+乳夹+国产+精品| 精品国产乱码久久久久久久久| 国产又粗又猛又爽又黄的视频小说 | 日韩一区二区中文字幕| 一级肉体全黄裸片| av成人免费在线| 天天爽夜夜爽夜夜爽精品视频| 久久综合久久综合九色| 色综合久久久久综合体桃花网| 国产精品成人无码专区| 国内偷窥港台综合视频在线播放| 亚洲人成影院在线观看| 日韩一区二区三区在线观看| 国产麻豆a毛片| 国产高潮失禁喷水爽到抽搐| 狠狠色综合日日| 亚洲精品国产精品乱码不99| 日韩三级在线观看| 永久看片925tv| 性欧美成人播放77777| 成人综合在线观看| 天天影视涩香欲综合网| 国产精品成人免费精品自在线观看| 欧美精品xxxxbbbb| 国精品人伦一区二区三区蜜桃| 久久久久久久穴| 国产91精品久久久久久久网曝门| 五月婷婷另类国产| 国产精品久久久久四虎| 日韩一级视频免费观看在线| 欧美三级在线免费观看| 波多野结衣 在线| 91丨porny丨九色|