在 2012年3月10日 下午6:32,agentzh <age...@gmail.com> 写道:
> On Sat, Mar 10, 2012 at 4:56 PM, Zoom.Quiet <zoom...@gmail.com> wrote:
>>
>> - 是也乎,是也乎,这种情景在面向 web 开发时,最常见:
>> - 现在 openresty 对 mysql/mongo/memcached/redis/pg 进行了合理的非阻塞封装
>
>
> 值得注意的是,ngx_openresty 本身并没有对这些上层协议进行任何封装。ngx_lua 仅是提供了 TCP socket API
> 而已。你列出的那些东西都是在 TCP 协议之上搞了一套上层应用协议罢了。
>
>>
>> - 其它的,得自行解决了吧?
>
>
> 其他的多可以用几行 Lua 自行解决。
>
>>
>> - 比较自然的,通过内部消息系统进行子任务分发
>> - 前端直接302 响应,給出任务等待url ?
>
>
> 对于大多数 web 应用来说,所谓的“内部消息系统”本身并不是一种优美的封装。ngx_lua 的并发模型对于用户程序员来说,长得和 nodejs
> 这样的“显式”事件模型是很不相同的。
>
>>
>> 即:
>> - 确认阻塞任务后,立即返回請求,給出新的請求url
>> - 将阻塞任务,丢给内部消息系统,不进行具体的阻塞执行
>> - 通过其它专用进程,进行 apache prefork 式的阻塞处理,和响应
>
>
> 整个系统就不应该有阻塞的网络 I/O 通信。否则 C10K 根本无法实现 :)
>
>>
>> 只是,需要明白 http RESTful 行为的客户端来配合?
>
>
> 这与 Nginx 下游的 HTTP 客户端的实现无关。
>
>>
>> 过程类似 附件泳道图?
>
>
> 不类似。
>
>>
>> 问题在:
>> - 怎么能将一个请求在内部,进行安全的分离?
>
>
> ngx_lua 是通过 Lua coroutine (或者说 Lua 协程)来实现请求之间的透明隔离的。
>
>
>>
>> 即:图中 1.0->2.0 怎么作到?
>
>
> 大部分 ngx_lua 的应用并不需要引入用户级别的任务队列。对于那些特别需要队列的场合,一般是使用 beanstalkd 或者 activemq
> 这样专门的外部队列服务。
>
>>
>> - 而且,怎么将阻塞工作进程和非阻塞工作进程进行显示的标定/指代使用?
>>
>
> 我觉得这里你混淆了阻塞与非阻塞 I/O,同步与异步操作这两对术语。
>
> ngx_lua 追求的模型是同步操作 + 非阻塞 I/O. 非阻塞 I/O 并不一定需要异步操作,同理,同步操作未必总是阻塞的。Nodejs
> 中的做法并不是唯一选择。
>
- 噢去噢,这是俺这种乱入的菜酻,常见概念混乱了
- 这么一提点,知道了思考方向,就好回炉,进行针对性学习了 ;-)
之前的邮件,已经指出了唯二的解决方案,非常明确,继续折腾去也
thanx for all
> 另:当你打算讨论新的问题时,建议开辟新的 mail thread,我觉得我们已经离题太远了。当前的 thread 主题可是“[BSD]
> agx.now() 以及 xss 问题”哈。
>
- 好习惯,靠谱的列表文化,,,
> Regards,
> -agentzh
--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/