2010-06-06 19 views
32

He estado jugando con node.js (nodejs) durante los últimos días y es fantástico. Por lo que puedo decir, lua no tiene una integración similar de libev y libio, que permite evitar casi cualquier llamada de bloqueo e interactuar con la red y el sistema de archivos de manera asincrónica.Node.js para lua?

Voy a portar lentamente mi implementación java a nodejs, pero estoy sorprendido de que luajit sea mucho más rápido que v8 JavaScript ¡Y usa mucha menos memoria!

Imagino que escribir mi servidor en un entorno como este (muy rápido y receptivo, muy poco uso de memoria, muy expresivo) mejorará enormemente mi proyecto.

Siendo nuevo en lua, no estoy seguro de si existe tal cosa. Apreciaré cualquier puntero.

Gracias

Respuesta

2

Puede obtener Node.js estilo de no bloqueo IO con lua-handlers.

Incluso tiene una función asíncrona. Cliente HTTP, lo que hace que sea realmente fácil iniciar solicitudes HTTP paralelas. Vea el archivo test_http_client.lua como un ejemplo de la interfaz del cliente HTTP.

23

Un proyecto correspondiente reciente es Luvit "(Lua + libUV + jIT = pure awesomesauce) ".

Desde el announcement:

esto es básicamente luajit2 + libuv (la biblioteca bucle de eventos detrás nodejs). Se compila como un único ejecutable como nodejs y puede ejecutar archivos .lua. Lo que lo hace diferente de la distribución de stock luajit es que tiene varios módulos incorporados y algunos semántica ligeramente diferente.

Tenga en cuenta que no estamos ejecutando como un script CGI a apache o cualquier cosa así. La secuencia de comandos lua es el servidor http. Obtiene su devolución de llamada cada vez que se realiza una solicitud http al servidor.

3

luvit pretende ser para Lua exactamente lo que Node.js es para Javascript. Definitivamente un proyecto prometedor.

6

También puede echar un vistazo a Luv:

https://github.com/richardhundt/luv

de la lista de correo de lua:

¿Cómo se relacionan con luv Luvit - LuaJIT + libuv (Node.js : s/JavaScript/Lua /)?

Realmente no. Luvit toma prestado mucho de la arquitectura de node.js (devoluciones de llamada del reactor, etc.), enlaces estáticos contra luajit, proporciona su propio sistema de módulos y es ejecutable. Luv es solo un módulo Lua que se une a libuv. La diferencia clave es que Luv es más como un motor de subprocesamiento m-n que combina corutinas y subprocesos del sistema operativo al usar el ciclo de eventos libuv bajo el capó.

Así que, aparte del hecho de que ambos se unen a libuv, no tienen mucho en común.

1

También debe echar un vistazo a Lapis. Es un marco muy ligero y rápido para OpenResty: http://leafo.net/lapis/

¡Realmente lo he disfrutado y predigo que tendrá un futuro brillante!

Como era de esperar con cualquier cosa construida para aprovechar OpenResty, es los puntos de referencia son terriblemente bueno: https://www.techempower.com/benchmarks/#section=data-r12&hw=peak&test=query

El autor de Lapis también escribió un lenguaje CoffeeScript similar para LUA llama MoonScript que es bastante agradable: http://moonscript.org/