The Journey from Lake JavaScript to The Strait of Lua

We Want to Swap Engines
-As of node.js v0.6.x, node is just V8 bindings to libuv right?
-So let’s just swap V8 with another engine.  LuaJit looks nice.
-This should be quick and easy.  Let’s port the boat!
Boating in Lake JavaScript
C Libraries
libuv – Provides non-blocking, callback based I/O and timers.
http_parser – Fast event-based HTTP protocol  parser.
openssl – Provides crypto primitives.
zlib  – Provides compression  and decompression.
Scripting Language Virtual Machine
google V8 – Runs JavaScript code.
Navigating The Strait of Lua
C Libraries
libuv – Provides non-blocking, callback based I/O and timers.
http_parser – Fast event-based HTTP protocol  parse
openssl – Provides crypto primitives.
zlib  – Provides compression  and decompression.
Scripting Language Virtual Machine
LuaJit – Runs Lua code
Why Bother Porting  the Canoe?
LuaJit is much lighter than V8 in embedded  situations.
I don’t like C++ for addons, I prefer straight C.
Lua has coroutines! (an alternative  to callbacks)
LuaJit has really fast FFI built-in
I wanted to make other things than websites.
Learning libUV
Cloned the repo at  https://github.com/joyen  libuv.git
Read include/uv.h
Joined #libuv on freenode  IRC.
Work  with @piscisaureus and @bnoordhuis.

TCP Server

int main() {

/* Initialize the tcp server handle */ uv_tcp_t* server = malloc(sizeof(uv_tcp_t)); uv_tcp_init(uv_default_loop(), server);
/* Bind to port 8080 on "0.0.0.0" */
printf("Binding to port 8080\n");
if (uv_tcp_bind(server, uv_ip4_addr("0.0.0.0", 8080))) {
error("bind");
}
/* Listen for connections */
printf("Listening for connections\n");
if (uv_listen((uv_stream_t*)server, 128, on_connection)) {
error("listen");
}
/* Block in the main loop */ uv_run(uv_default_loop()); return 0;

TCP Server Continued

/* Callback on data chunk from client */

static void on_read(uv_stream_t* stream,
ssize_t nread, uv_buf_t buf) {
if (nread >= 0) {
printf("chunk: %.*s", (int)nread, buf.base);
} else {
uv_err_t err = uv_last_error(uv_default_loop());
if (err.code == UV_EOF) {
printf("eof\n");
uv_close((uv_handle_t*)stream, on_close);
} else {
fprintf(stderr, "read: %s\n", uv_strerror(err));
exit(-1);
}
}
free(buf.base);

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
The Journey from Lake JavaScript to The Strait of Lua (465.52 KO) (Cours PDF)
Strait of Lua

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *