luajit-libuv
This project provides a LuaJIT FFI binding to libuv, the async I/O library powering Node.js. It uses Lua coroutines to provide non-blocking I/O with synchronous syntax.
For example, you can build a web server that performs I/O (like reading a file or talking to a database) while generating each response, and it will process multiple requests simultaneously.
local http = require 'uv.http'
local fs = require 'uv.fs'
http.listen('127.0.0.1', 8080, function(request)
return { status = 200, body = fs.readfile('README.md') }
end)
Or you can perform multiple HTTP requests simultaneously.
local http = require 'uv.http'
local parallel = require 'uv.parallel'
local requests = {
{ url = 'http://www.google.com/' },
{ url = 'http://www.bing.com/' },
{ url = 'http://www.amazon.com/' },
}
local responses = parallel.map(requests, http.request)
Status
Not production ready. Under active development. The API is unstable.
Requirements
-
LuaJIT. Regular Lua won't run it. That said, you probably want LuaJIT anyway.
-
Standard build tools.
-
libuv and http-parser are bundled and do not need to be installed separately.
Installation
git clone https://github.com/pguillory/luajit-libuv.git
cd luajit-libuv
make
make install
API Reference
Functions are divided into submodules. Each submodule can either be required directly or accessed indirectly through the uv
module:
local fs = require 'uv.fs'
local uv = require 'uv'
local fs = uv.fs
- uv.fs - File system
- uv.http - HTTP client and server
- uv.loop - Event loop control
- uv.parallel - Parallel processing
- uv.process - Process management
- uv.system - System utility functions
- uv.timer - Timers
- uv.url - URL parsing and encoding
Contributing
Your contributions are welcome! Please verify that make test
succeeds and
submit your changes as a pull request.
See Also
Other people have done things like this.