lua-resty-router 实现

2017-04-22 21:06:08 +08:00
 hulk

简单的 nginx-lua 路由实现,欢迎一起来玩玩: https://github.com/git-hulk/lua-resty-router

2836 次点击
所在节点    程序员
6 条回复
artandlol
2017-04-22 21:24:59 +08:00
早上还有人要搞这个来着 。。。
hulk
2017-04-22 21:40:42 +08:00
@artandlol 哈哈,抢先一步
spacewander
2017-04-24 00:54:22 +08:00
仔细看了下代码。
随便说几点肤浅的想法~
1. 这个 router 并不依赖于 cosocket 吧……刚打开的时候看到一句 ` based on the cosocket API`,我还以为这个 router 是不是会动态更新路由。
2. 创建 router 和 使用 router 的场景可以分离。毕竟 router 在响应请求时一般不会再修改内部的配置,无需每次请求都创建一遍。我觉得有必要在 README 中展示这一点。当然 `throw` 函数就要备两份,不能创建和使用 router 都使用同一个。
3. 如果存在 `get /a/:b/:c`,就不能再定义 `get /a/:b`。但其实这应该是两种路由。感觉节点树的实现还可以更精细些。
4. 路由没有实现 normalize ,比如我在路由里加个 `../`,就不能正常处理了。而 Nginx 自身的路由是可以处理这种情况的。当然这个就吹毛求疵啦。
5. router 的匹配里面,如果已知当前节点只有一个子节点(或少数几个子节点),是否可以改用正则匹配的方式去比较呢?这样就可以节省继续解析 token 的花销了。
spacewander
2017-04-24 09:42:46 +08:00
我上面说的第 4 点是错的……
Nginx 的 `$uri` 本身就已经 normalize 了,是我看代码的时候想当然了。
hulk
2017-05-02 23:21:50 +08:00
1. 这个是 README 格式 copy 没有去掉,已经 FIX
2. 是的,例子上可能是有些误导,实际上使用应该是在 init 的时候添加路由,实际使用就不用再关心
3. 这个是实现的 bug, 如果先添加 `get /a/:b/` 就可以添加 `get /a/:b/:c`, 这个我会 FIX
5. 这点我后面对比压测下当前的实现和正则的性能差别,如果差别不大,不会去做特殊优化。

最后以上建议都很棒,感谢回馈~
hulk
2017-05-03 00:01:56 +08:00
3. 如果存在 `get /a/:b/:c`,就不能再定义 `get /a/:b`。 最新版本已经 FIX

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/356692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX