iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang怎么使用http协议实现心跳检测程序
  • 445
分享到

Golang怎么使用http协议实现心跳检测程序

2023-07-05 12:07:36 445人浏览 薄情痞子
摘要

本文小编为大家详细介绍“golang怎么使用Http协议实现心跳检测程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么使用http协议实现心跳检测程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧

本文小编为大家详细介绍“golang怎么使用Http协议实现心跳检测程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么使用http协议实现心跳检测程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

需求说明

实现心跳程序,其他应用可以简单集成。客户端程序通过HTTP协议进行检测,返回当前程序状态、版本ID以及已运行时间。

程序实现

package mainimport ("encoding/JSON""GitHub.com/hako/durafmt""log""net/http""time")const NotAvailableMessage = "Not available"var CommitHash stringvar StartTime time.Timetype HeartbeatMessage struct {Status string `json:"status"`Build  string `json:"build"`Uptime string `json:"uptime"`}func init() {StartTime = time.Now()}func handler(rw http.ResponseWriter, r *http.Request) {hash := CommitHashif hash == "" {hash = NotAvailableMessage}df, _ := durafmt.ParseString(time.Since(StartTime).String())uptime := df.String()err := json.NewEncoder(rw).Encode(HeartbeatMessage{"running", hash, uptime})if err != nil {log.Fatalf("Failed to write heartbeat message. Reason: %s", err.Error())}}func RunHeartbeatService(address string) {http.HandleFunc("/heartbeat", handler)log.Println(http.ListenAndServe(address, nil))}

首先定义了两个变量,CommitHash、StartTime,然后定义结构体HeartbeatMessage封装返回值。

接着在init方法中给StartTime变量赋初始值。下面时处理请求handler方法:

func handler(rw http.ResponseWriter, r *http.Request) {hash := CommitHashif hash == "" {hash = NotAvailableMessage}df, _ := durafmt.ParseString(time.Since(StartTime).String())uptime := df.String()err := json.NewEncoder(rw).Encode(HeartbeatMessage{"running", hash, uptime})if err != nil {log.Fatalf("Failed to write heartbeat message. Reason: %s", err.Error())}}

这个把CommitHash给hash,CommitHash可以通过上文的知识,在编译时赋值。然后计算应用已运行的时间并返回HeartbeatMessage结构体的值。durafmt是时间周期格式化工具,比内置的更直观易用。

当然最重要的是HTTP服务,Golang只需要一句代码http.ListenAndServe(address, nil)就搞定:

func RunHeartbeatService(address string) {http.HandleFunc("/heartbeat", handler)log.Println(http.ListenAndServe(address, nil))}

该函数定义http服务,同时暴露一个请求地址:/heartbeat

Postman测试

定义一个最简单的应用,在main方法中调用心跳功能,为了避免影响业务,让其在独立的协程中运行。

func main() {go RunHeartbeatService(":9090")// 阻塞主程序,模拟应用一直在运行select {}}

现在可以通过postman定时请求心跳地址,验证程序是否一直正常运行。

localhost:9090/heartbeat
{"status":"running","build":"Not available","uptime":"3 minutes 47 seconds 148 milliseconds 967 microseconds"}

Go客户端测试

下面我们写Get方法,使用Go语言实现http客户端进行测试:

func Get(address string) (HeartbeatMessage, error) {// 定义http clientclient := &http.Client{}req, err := http.NewRequest("GET", address, nil)resp, err := client.Do(req)if err != nil {return HeartbeatMessage{}, err}// 解析响应并返回结果b, err := io.ReadAll(resp.Body)defer resp.Body.Close()if resp.StatusCode != http.StatusOK {return HeartbeatMessage{}, errors.New(fmt.Sprintf("Wrong status code: %d", resp.StatusCode))}message := HeartbeatMessage{}err = json.Unmarshal(b, &message)if err != nil {log.Println("Error occured unmarshalling the response")}return message, nil}

Go单元测试

package mainimport ("fmt""testing")func TestGet(t *testing.T) {hs, err := Get("http://localhost:9090/heartbeat")if err != nil {fmt.Println(err)}fmt.Println(hs)}

测试结果:

=== RUN   TestGet
{running Not available 6 minutes 2 seconds 625 milliseconds 381 microseconds}
--- PASS: TestGet (0.01s)
PASS

读到这里,这篇“Golang怎么使用http协议实现心跳检测程序”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: Golang怎么使用http协议实现心跳检测程序

本文链接: https://www.lsjlt.com/news/351691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang怎么使用http协议实现心跳检测程序
    本文小编为大家详细介绍“Golang怎么使用http协议实现心跳检测程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么使用http协议实现心跳检测程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • Golang使用http协议实现心跳检测程序过程详解
    目录需求说明程序实现Postman测试Go客户端测试Go单元测试本文介绍如何使用Golang实现心跳程序。 需求说明 实现心跳程序,其他应用可以简单集成。客户端程序通过HTTP协议进...
    99+
    2023-03-15
    Golang心跳检测 Golang http协议 心跳检测
  • 如何使用Go语言实现Websocket心跳检测
    如何使用Go语言实现Websocket心跳检测Websocket是一种在Web应用中实现双向通信的协议,它能够允许服务器主动向客户端推送数据。在一些实时性要求高的应用中,我们可能需要实时监测客户端的状态,确保连接的稳定性。为了实现这个目标,...
    99+
    2023-12-14
    Go语言 websocket 心跳检测
  • 怎么在c#中利用socket实现一个心跳超时检测的功能
    怎么在c#中利用socket实现一个心跳超时检测的功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 内存布局图假设socket3有新的数据到达,需要更新socket3所在的...
    99+
    2023-06-07
  • Golang中怎么利用协程批量检测代理线路
    这篇文章给大家介绍Golang中怎么利用协程批量检测代理线路,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ip代理-Golang协程批量检测代理线路ip代理-Golang协程批量检测代理线路本篇文章讲述如何获取公网ip...
    99+
    2023-06-05
  • 怎么用Python基于udp协议实现聊天小程序
    这篇文章主要介绍“怎么用Python基于udp协议实现聊天小程序”,在日常操作中,相信很多人在怎么用Python基于udp协议实现聊天小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python基于...
    99+
    2023-06-02
  • 使用Unity怎么实现地面检测
    这篇文章将为大家详细讲解有关使用Unity怎么实现地面检测,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.普通射线在角色坐标(一般是脚底),发射一根向下的射线(长度约0.2)但是简单射线只...
    99+
    2023-06-15
  • Golang中怎么使用跳表实现SortedSet
    本篇内容介绍了“Golang中怎么使用跳表实现SortedSet”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!结构定义实现ZRange命令最...
    99+
    2023-06-04
  • 怎么使用opencv实现车道线检测
    这篇“怎么使用opencv实现车道线检测”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用opencv实现车道线检测”文...
    99+
    2023-06-29
  • 怎么使用php伪协议实现命令执行
    今天小编给大家分享一下怎么使用php伪协议实现命令执行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.file://协议条...
    99+
    2023-07-02
  • 微信小程序使用stomp.js实现STOMP传输协议的实时聊天
    简介: uniapp开发的小程序中使用 本来使用websocket,后端同事使用了stomp协议,导致前端也需要对应修改。 如何使用 在static/js中新建stomp.js和websocket.js,然后在需要使用的页面引入监听代码+...
    99+
    2023-08-30
    微信小程序 小程序 stomp websocket IM 即时通信
  • 使用OpenCV怎么实现Canny边缘检测
    今天就跟大家聊聊有关使用OpenCV怎么实现Canny边缘检测,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. Canny 边缘检测理论Canny 是一种常用的边缘检测算法. 其是...
    99+
    2023-06-20
  • Golang怎么使用Gin框架实现HTTP上传文件
    本文小编为大家详细介绍“Golang怎么使用Gin框架实现HTTP上传文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么使用Gin框架实现HTTP上传文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 怎么在Python中使用gevent实现协程
    怎么在Python中使用gevent实现协程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象...
    99+
    2023-06-14
  • 使用Canvas怎么实现文字碰撞检测并抽稀
    使用Canvas怎么实现文字碰撞检测并抽稀?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。计算文字在 canvas 中所占据的范围// 计算文字所需的宽度var&n...
    99+
    2023-06-09
  • 使用opencv怎么实现一个车道线检测功能
    这篇文章给大家介绍使用opencv怎么实现一个车道线检测功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。原理:算法基本思想说明:传统的车道线检测,多数是基于霍夫直线检测,其实这个里面有个很大的误区,霍夫直线拟合容易受...
    99+
    2023-06-06
  • C#怎么使用Twain协议实现扫描仪连续扫描功能
    本篇内容主要讲解“C#怎么使用Twain协议实现扫描仪连续扫描功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么使用Twain协议实现扫描仪连续扫描功能”吧!C#调用Twain接口实现扫...
    99+
    2023-06-26
  • JSch中怎么使用sftp协议实现服务器文件上传下载
    这篇文章主要介绍了JSch中怎么使用sftp协议实现服务器文件上传下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JSch中怎么使用sftp协议实现服务器文件上传下载文章都会有所收获,下面我们一起来看看吧。J...
    99+
    2023-06-29
  • 怎么在Python3中使用OpenCV实现实时摄像头人脸检测
    这篇文章主要介绍怎么在Python3中使用OpenCV实现实时摄像头人脸检测,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!OpenCV 是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面...
    99+
    2023-06-25
  • 怎么在Html5中使用Canvas实现动画碰撞检测功能
    本篇文章为大家展示了怎么在Html5中使用Canvas实现动画碰撞检测功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作