- 论坛徽章:
- 4
|
本帖最后由 linux_c_py_php 于 2013-02-25 11:38 编辑
这个问题纠结于你到底是以C为主还是以LUA为主, luvit我看了是以LUA为主, 目的是仿node.js, 在思想上是有差别的, 不过两者都会遇到我说的这个问题, 我自己去看看它怎么在框架做到统一回调简化编程的吧.
1, 我是写C server, 然后开放lua api让用户处理请求, 我相当于nginx与nginx module的概念.
2, luvit是Lua server, 用户用纯lua语法就可以跑起一个server, 用户只要提供一个lua callback即可, 所以主程变成了lua, 即lua生命期就是server的生命期, 它会调用Listen, 然后底层就开始跑epoll了, 比如跑HTTP那个框架, Listen底层Epoll解析到一个http请求, 框架就会调用用户设置的callback来处理, 这个callback可能异步(比如发起连接其他server), 框架还是需要适时的resume回到lua脚本继续执行用户的未完的callback, 这个适时到底是怎么做到的, 我需要去读读它的代码, 这是我唯一关系的设计问题:- local net = require('net')
- local server
- server = net.createServer(function (client)
- -- Echo everything the client says back to itself
- client:pipe(client)
- -- Also log it to the server's stdout
- client:pipe(process.stdout)
- end):listen(8080)
- print("TCP echo server listening on port 8080")
复制代码 |
|