gin.engine

news/2024/11/29 14:52:56/文章来源:https://www.cnblogs.com/oldking1002/p/18569831
  1. Engine
    Engine即gin对应的服务端类(Server类),对应net/http中的ServeMux。编写gin的服务时,通常有两种初始化方法:

以上两种方法都生成一个*Engine实例,只是gin.Default()生成的Engine带了Logger和Recovery两个中间件。Engine的核心成员如下:
一个Engine的核心功能包括:

·注册路由
·给某个路由添加中间件
·接受新的连接
·当已有连接有数据来临时,调用对应路由下的处理函数(请求处理,此部分开启了单独的goroutine处理)
下面我们看一下对应的实现了以上功能的Engine函数。
注:Engine的路由和中间件注册对应在radix tree的添加节点,请求处理中的路由匹配部分对应在radix tree中查找节点。只要明白了radix tree的原理,这几个功能很好理解。而接受新的连接和连接到来时,调用请求处理函数则是复用了net/http的处理函数,参考上一章第一节部分。因此以下部分只介绍对应的函数和原理,不展示源码,以求提纲挈领。
路由注册和添加路由中间件
注册路由等功能是通过Engine下的RouterGroup实现的,RouterGroup实现了POST, GET,PUT, Group等函数。POST, GET,PUT, DELETE等函数就是在路由树radix_tree上添加一个路由节点;Group则是添加一个路由组,本质上就是在radix_tree上添加了一个非叶节点的路由节点。理解gin的路由实现,以上函数的原理理解起来就非常容易。中间件通过RouterGroup实现的Use函数添加。中间件函数的签名和请求处理函数一致,Use函数就是在RouterGroup.Handlers(HandlerFunc的数组)中添加一个中间件HandlerFunc。
接受新的连接
Engine的Run函数底层就是一个for循环,在循环内为每个新到来的连接创建一个goroutine(本质上是利用了net/http的ListenAndServe函数,实现对新连接的处理)
处理请求
Engine实现了ServeHTTP函数,从上一章1.3的分析中,我们知道ServeHTTP是统一的请求处理函数。ServeHTTP的主要作用就是在Engine.trees中找到跟请求路由对应的HandlersChain,并调用它们处理请求,回写结果(即路由匹配->请求处理->结果回写)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/841569.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么ChatGpt能够那么精准的回答我们的问题,让Gpt自己回答!

一句话理解,授人以鱼不如授人以渔,而GPT每次给别人解答问题的时候都是记住的是这个“渔”本文来自博客园,作者:WantRemake,转载请注明原文链接:https://www.cnblogs.com/SmallChen/p/18569819

arthas排查接口响应超时并优化查询

本文主要记录使用arthas工具来排查线上系统接口性能问题,如果你也刚好刷到这篇文章,希望对你有所帮助。 事情起因是接手了一个项目,已经部署在现场了,结果访问页面提示超时,这里先通过F12打开浏览器开发者工具,确定了是接口getMeterList接口响应超时,接着我去看了应用日…

C#Csharp演示代码编译

C#Csharp演示代码编译 一、新建一个txt文件直接修改后缀二、写一个基础代码 和所有代码一样,首先需要一个函数入口: using System;namespace MySpace { class Program{static void Main(string[] args){Console.WriteLine("hello w");Console.ReadKey();}} }三、C#…

电脑用户名修改

右击此电脑选择管理选择需要修改的用户进行更改

4G模组LuatOS:超低功耗模式的快速入门指南

关于超低功耗模式的快速入门指南,我将教大家使用Air201的超低功耗模式下,定时三分钟上传以及G-senser拓展示例。 接下来,我们讲解相关示例的具体使用。关于超低功耗模式的快速入门指南,我将教大家使用Air201的超低功耗模式下,定时三分钟上传以及G-senser拓展示例。 接下来…

4G模组LuatOS开发的通用加解密函数(crypto)全面解读

本文说的是4G模组的通用加解密函数(crypto)全面解读,我会以咋们常用的低功耗模组Air780E作为例子做LuatOS开发。本文说的是4G模组的通用加解密函数(crypto)全面解读,我会以咋们常用的低功耗模组Air780E作为例子做LuatOS开发。 一、加解密概述 加解密算法是保证数据安全的基础…

Docker - Minio对象存储部署

Minio 是一个基于 Apache License v2.0 开源协议的对象存储服务。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。集群部署也是非常的简单,本篇文章只讨论单机部署,集群有…

Docker 部署 Apollo 分布式配置管理中心

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 镜像拉取# 配置服务,负责:配置的读取和推送 dock…

设备管理混乱难治理? 来看纷享销客CRM如何将被动管理转为主动,从建档到服务的全程管理!

在设备资产管理的领域,严谨的管理系统是必要的。而不严谨的管理系统往往存在着以下问题: 1、客户、项目、地区等关键信息分散在不同系统和文档中,缺乏全局索引和有效关联,使得信息检索变得困难。 2、难以全面掌握资产的全生命周期信息,运营跟踪和维修维护历史难以获取,包…

jmeter之性能实战(16.2)

一、单接口的性能测试 添加一个接口: 案例:登录接口: url:POST http://cms.duoceshi.cn/cms/manage/loginJump.do POST data: userAccount=admin&loginPwd=123456 1、调通登录接口2、添加查看结果树和聚合报告3、聚合报告的内容分析聚合报告参数详解: Label:每个 JMe…

看不懂来打我,Vue3的watch是如何实现监听的?

前言 watch这个API大家都很熟悉,今天这篇文章欧阳来带你搞清楚Vue3的watch是如何实现对响应式数据进行监听的。注:本文使用的Vue版本为3.5.13。 关注公众号:【前端欧阳】,给自己一个进阶vue的机会 看个demo 我们来看个简单的demo,代码如下: <template><button @…

JavaScript 编程精解(Eloquent)第四版翻译完成

JavaScript 编程精解(Eloquent)第四版第一章:引言第一部分:语言第二章:值、类型和运算符第三章:程序结构第四章:函数第五章:数据结构:对象和数组第六章:高阶函数第七章:对象的秘密生活第八章:项目:一个机器人第九章:漏洞和错误第十章:正则表达式第十一章:模块第…