简单的 nginx-lua 路由实现,欢迎一起来玩玩: https://github.com/git-hulk/lua-resty-router
1
artandlol 2017-04-22 21:24:59 +08:00 via Android
早上还有人要搞这个来着 。。。
|
3
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 的花销了。 |
4
spacewander 2017-04-24 09:42:46 +08:00 1
我上面说的第 4 点是错的……
Nginx 的 `$uri` 本身就已经 normalize 了,是我看代码的时候想当然了。 |
5
hulk OP 1. 这个是 README 格式 copy 没有去掉,已经 FIX
2. 是的,例子上可能是有些误导,实际上使用应该是在 init 的时候添加路由,实际使用就不用再关心 3. 这个是实现的 bug, 如果先添加 `get /a/:b/` 就可以添加 `get /a/:b/:c`, 这个我会 FIX 5. 这点我后面对比压测下当前的实现和正则的性能差别,如果差别不大,不会去做特殊优化。 最后以上建议都很棒,感谢回馈~ |
6
hulk OP 3. 如果存在 `get /a/:b/:c`,就不能再定义 `get /a/:b`。 最新版本已经 FIX
|