golang 优雅关闭服务

一、什么是优雅关闭服务

先把在执行的任务执行完成,再关闭服务,防止中断服务造成程序错误,数据异常等影响。

在这里插入图片描述

二、使用函数

语法:


func (srv *Server) Shutdown(ctx context.Context) error

作用: Shutdown优雅地关闭服务器,而不会中断任何活动连接。

工作原理: 首先关闭所有打开的侦听器,然后关闭所有空闲连接,然后无限期地等待连接恢复空闲状态,然后关闭。 如果提供的上下文在关闭完成之前过期,shutdown将返回上下文的错误,否则将返回关闭服务器底层侦听器返回的任何错误。

三、使用案例

例:


package main

import (
	"context"
	"log"
	"net/http"
	"os"
	"os/signal"
	"time"
	"syscall"

	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	router.GET("/", func(c *gin.Context) {
		time.Sleep(5 * time.Second)
		c.String(http.StatusOK, "Welcome Gin Server")
	})

	srv := &http.Server{
		Addr:    ":8080",
		Handler: router,
	}

	go func() {
		// 服务连接
		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatalf("listen: %s\n", err)
		}
	}()

	// 创建一个无缓冲通道
	quit := make(chan os.Signal)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM)
	
	// 在未接受到信号时,通道发生阻塞。
	<-quit
	
	log.Println("Shutdown Server ...")

	// 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	
	// 执行关闭服务操作
	if err := srv.Shutdown(ctx); err != nil {
		log.Fatal("Server Shutdown:", err)
	}
	
	log.Println("Server exiting")
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang 直播服务器是使用 Go 语言开发的直播服务端软件。Go 语言是一种开源的高性能编程语言,特点是简洁、高效、易用,并具备并发编程的能力。因此,使用 Go 开发直播服务器能够满足直播行业对于性能和并发处理的需求。 Golang 直播服务器主要具备以下功能: 1. RTMP 协议支持:Golang 直播服务器可以接收和处理来自用户端的 RTMP 视频流,实现音视频编码、解码、转码等功能。 2. 实时转发:Golang 直播服务器可以将接收到的视频流实时转发给观众端,实现实时的直播效果。 3. 弹幕支持:弹幕是直播中观众与主播之间的实时互动形式,Golang 直播服务器可以支持弹幕的发送和接收,并实时显示在观众端的播放画面上。 4. 直播录制:Golang 直播服务器可以将直播过程进行录制,并保存为视频文件,方便用户进行回放或存档。 5. 观众管理:Golang 直播服务器可以管理观众的连接和状态,实时统计观众数等信息。 6. 异常处理:Golang 直播服务器能够处理各种异常情况,包括网络中断、视频流异常等,并提供相应的异常处理策略,确保直播过程的稳定性和可靠性。 总之,Golang 直播服务器以其高性能、高并发处理能力和丰富的功能,为直播行业提供了一种稳定可靠的直播服务端解决方案。通过使用 Go 语言开发的直播服务器,可以实现高质量、高可靠性的直播体验,满足用户的直播需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值