zoukankan      html  css  js  c++  java
  • 9.11 优雅的停止http服务

    
    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    	"os/signal"
    	"time"
    )
    
    func main() {
    
    	mux := http.NewServeMux()
    	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    		time.Sleep(10 * time.Second)
    		fmt.Fprintln(w, "Hello world!")
    	})
    
    	srv := &http.Server{Addr: ":8080", Handler: mux}
    	go func() {
    		if err := srv.ListenAndServe(); err != nil {
    			log.Printf("Server error: %s
    ", err)
    		}
    	}()
    
    	log.Println("Server listening on : " + srv.Addr)
    
    	stopChan := make(chan os.Signal)
    	signal.Notify(stopChan, os.Interrupt)
    
    	<-stopChan // wait for SIGINT
    	log.Println("Shutting down server...")
    
    	ctx, cancel := context.WithTimeout(
    		context.Background(),
    		30*time.Second)
    	srv.Shutdown(ctx)
    	cancel()
    	log.Println("Server gracefully stopped")
    }
    
    /*
    2018/03/27 00:18:10 Server listening on : :8080
    2018/03/27 00:19:56 Shutting down server...
    2018/03/27 00:19:56 Server error: http: Server closed
    2018/03/27 00:20:04 Server gracefully stopped
    */
    
  • 相关阅读:
    cogs luogu 1901. [国家集训队2011]数颜色 待修改莫队
    luogu cogs 421. HH的项链
    luogu P2709 小B的询问
    排序
    算法基本概念
    金融的简单介绍
    Admin组件-----Django自带
    day02-菜单处理
    day01
    selenium常用方法
  • 原文地址:https://www.cnblogs.com/zrdpy/p/8655004.html
Copyright © 2011-2022 走看看