HttpRouter源码分析

HttpRouter源码分析

  • 简单来说, httprouter 的 router 维护了⼀个 trees(树) ,它是⼀个map。这个map的 key 就是各种HTTP请求⽅法,对应的值就是⼀个 node(节点) 。也就是路由器为每个请求⽅法管理⼀个单独的树。

httprouter路由原理

  • 路由器依赖于⼤量使⽤通⽤前缀的树结构,它基本上是⼀个紧凑的前缀树(或只是基数树)。具有公共前缀的节点也共享⼀个公共的⽗节点。
    举例:
router := httprouter.New()
router.GET("/search/", func1)
router.GET("/support/", func2)
router.GET("/blog/:post/", func3)
router.GET("/about-us/", func4)
router.GET("/about-us/team/", func5)
router.GET("/contact/", func6)

路由树:

Priority Path 		Handle
9		 \ 			*<1>
3 		!s 			nil
2 		|!earch\ 	*<2>
1 		|"upport\ 	*<3>
2 		!blog\ 		*<4>
1 		| ":post 	 nil
1 		| "\ 		 *<5>
2 		!about-us\   *<6>
1 		| "team\ 	 *<7>
1 		"contact\ 	 *<8>
  • 路由器为每个请求⽅法管理⼀个单独的树,它⽐在每个节点中保存⼀个⽅法(>句柄映射)更节省空间,它还允许我们在开始查找前缀树之前极⼤地减少路由问题。
  • 为了获得更好的可伸缩性,每个树级别上的⼦节点都按Priority(优先级) 排序,其中优先级(最左列)就是在⼦节点(⼦节点、⼦⼦节点等等)中注册的句柄的数量。

为什么不用哈希

  • 因为URL中存在不确定的字符串,不是一个确定的URL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值