frostnotfall
2022-07-15 18:01:39 +08:00
根本原因是 lua 传参时传 0 导致异常。
“_gcd 函数对入参没有做类型校验,允许参数 b 传入:"0"。同时因为"0" != 0 ,所以此函数第一次执行后返回是 _gcd("0",nan)。如果传入的是 int 0 ,则会触发[ if b == 0 ]分支逻辑判断,不会死循环。”
说实话,lua 语言欠缺的恰恰就是种种类似这样的小细节,也是服务端没有大规模用起来的原因。比如用默认的排序、遍历这些,都需要额外的逻辑来处理,所用不所见,所见不所得。
openresty 将 lua 集成进 Nginx 无疑是非常方便的,开发速度嘎嘎高。曾经需要在 L7 层做加解密逻辑,一天半的时间,从了解 Lua 到代码完成并测试。速度是真的快。
但是 lua 毕竟是缝合进 Nginx 的,天生就不会 100%完全匹配,再加上 lua 的种种小问题,总有种那着精致的小手枪上战场的赶脚。