errgroup 实现 http server启动和关闭

errgroup 实现 http server启动和关闭

问题描述

基于 errgroup 实现一个 http server 的启动和关闭 ,以及 linux signal 信号的注册和处理,要保证能够一个退出,全部注销退出。

实现方案

根据描述信息,可以简单汇总成3块内容:

  1. 实现 HTTP server 的启动和关闭
  2. 监听 linux signal信号,支持 kill -9 或 Ctrl+C 的中断操作操作
  3. errgroup 实现多个 goroutine 的级联退出

按照实现方案,我们将任务拆分成多个小的功能。

  1. 实现 http server 的启动和关闭功能
  2. 使用 chan 实现对 linux signal 中断的注册和处理
  3. 通过 errgroup + context 的形式,对 1、2中的 goroutine 进行级联注销

具体过程

实现 http server 的启动和关闭

一般的http server 启动

func helloServer(w http.ResponseWriter, req *http.Request){
   
    io.WriteString(w,"hello,word!")
}
func main(){
   
    http.HandleFunc("/hello", helloServer)
    if err := http.ListenAndServer(":8080",nil); err!=nil{
   
        log.Fatal("server start error: ", err)
    }
}

http.ListenAndServer 其实最后调用的是 func (srv *Server) ListenAndServe() error {…},所以我们可以直接使用 srv *Server 来调用,代码如下

srv := &http.Server{Addr: ":9090"}
http.HandleFunc("/hello", HelloServer2)
fmt.Println("http server start")
if err := srv.ListenAndServer(); err!=nil{
	log.Fatal("server start error: ", err)
}
//关闭 server 
// srv.Shutdown(context.TODO())

使用 chan 实现对中断的注册和处理

通过 signal.Notify(…) 实现对中断信号量的监听,完整代码如下

func main(){
   
	c := make(chan os.Signal
### ThingsBoard 物联网平台文档和教程 ThingsBoard 是一个开源的物联网(IoT)平台,旨在帮助用户收集、可视化并处理来自传感器和其他设备的数据。该平台提供了丰富的功能集来支持IoT应用开发,包括但不限于数据采集、规则引擎配置以及仪表板创建。 对于希望快速上手或深入了解如何利用这一强大工具的人来说,官方提供的文档是一个非常好的起点[^1]。通过访问 [ThingsBoard 官方网站](https://thingsboard.io/docs/) ,可以找到详细的安装指南、API 参考手册以及其他资源链接。 #### 创建第一个项目实例 为了更好地理解 ThingsBoard 的工作原理及其所提供的特性,在线教程建议从构建简单的温度监控系统开始。这通常涉及以下几个方面: - **设置环境**:按照给定的操作说明完成软件部署; - **连接设备**:学习怎样把物理世界中的硬件接入到云服务端口; - **定义业务逻辑**:掌握使用内置规则引擎实现自动化响应的方法; ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("v1/devices/me/telemetry") client = mqtt.Client() client.on_connect = on_connect client.username_pw_set('DEVICE_ACCESS_TOKEN') client.connect("THINGSBOARD_HOST", 1883, 60) client.loop_forever() ``` 上述代码片段展示了如何基于 MQTT 协议向 ThingsBoard 发送遥测消息的一个简单例子。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值