Hello!
2015-02-15 0:50 GMT-08:00 home_king:
> 1. 如果pattern的size大于buffer的max size,那就没法匹配了,对吧?虽然这种是极端情况,呵呵。
不对。我上封邮件已经提到了,这里使用的是 DFA 匹配,状态机自己维护状态,不存在回溯的问题,所以自然没有必要在接收缓冲区里保留用户
pattern 已经匹配的(前缀)部分。
建议仔细阅读代码和自己做一些小试验,以节约时间。
> 2. receiveuntil的pattern只能是plain string,不能是正则表达式?
官方方档里面没有说支持正则表达式吧?
支持正则需要多得多的代码量,因为需要内置一个完整的流式正则引擎,类似 sregex 引擎:
https://github.com/openresty/sregex
> 3. iterator A和B共享同一个input
> buffer,那A如果读了数据,就有可能影响B了吧?假设A的pattern是"--cdef",而B是“-cd”,如果某时刻A读取了"--cdx",A匹配不到,而B又没了这部分数据了,本来B是可以匹配的。
既然你按如此方式使用,那么你就应该明白自己在做什么 :)
> 我的问题是upload执行的时候,client端是没有断开连接的,它在等候response,那么sock:receive应该会阻塞,而另一方面,upload没执行完,request
> handling就不会继续,也就不会发response,这里是个死锁吗?
> 当然,我实际测试过,不会有这个问题,这里的sock:receive会直接返回empty dummy without error,是不是将request
> socket包装起来的cosocket,边界是request body的边界(nginx判断content-lenght而定出边界?),而不是整个tcp
> connection的边界呢?
>
ngx.req.socket 默认是首先遵守 HTTP 协议的,自然不会尝试读取超过 Content-Length
请求头指定的长度。除非你指定了 raw 参数为 true.
继续抄送 openresty 中文邮件列表。
Regards,
-agentzh