aLiLua web框架——node.js般的异步处理遇上PHP般的开发效率

简介: aLiLua是基于Lua语言的一款网络服务开发框架, 使用 epoll 进行网络/文件IO事件读写,对Lua协程进行调度,性能高效,使用简单。

aLiLua是基于Lua语言的一款网络服务开发框架, 使用 epoll 进行网络/文件IO事件读写,对Lua协程进行调度,性能高效,使用简单。


为什么会有aliLua?

又拍云oneoo欣赏 node.js 高效的异步处理,但是不喜欢 node.js 累人的基于回调的开发节奏,因此想到了 Lua 这个开发效率跟 PHP 一样快,而同步逻辑比 node.js 清晰的语言。于是,aliLua就诞生了。


Lua 语言

Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程式里。和许多"大而全"的语言不一样,网路通讯、图形界面等都没有默认提供。但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。


Lua是一个动态弱类型语言,支援增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程(coroutine)支援。

aLiLua 核心通过 epoll 处理异步IO事件,并引入 Lua 语言用于业务逻辑处理。aLiLua 的事件核心可非常高效的调度多个 Lua 协程,使之协同工作以实现高并发的网络服务。


简单的同步逻辑

在 aLiLua 开发框架之下的 Lua 脚本跟 PHP 类语言类似,但却支持异步IO,只消耗很小的系统资源就可达到很高的处理能力。以下是一个简单的例子:

local sock = cosocket:tcp()

local r,e = sock:connect(host, port)

r,e = sock:send(...)

r,e = sock:read(...)

print(r)

上面5行代码,中间3行就是异步的网络IO操作。看上去是不是跟 PHP 很像?作为 Lua 脚本开发者无需关心IO操作如何进行异步操作,只要专心于业务逻辑的开发就可以。


轻松的并发处理

aLiLua 核心可调度大量协程,当然我们可以并发处理更多的业务。以下是一个并发处理的例子:

functiondownload(host, uri)

 return newthread(function(host, uri)

   local sock = cosocket:tcp()

   local r,e = sock:connect(host, port)

   r,e = sock:send(...)

   r,e = sock:read(...)

   return r,e

 end, host, uri)

end

local t1 = download('www.alilua.com', '/')

local t2 = download('www.alilua.com', '/docs.html')

local r,e

r,e = wait(t1)

r,e = wait(t2)

上面的例子可以并行下载两个页面,跟下载工具的多线程下载类似,可在一个时间内一起做几件事情,提高效率。并且使用协程并发处理比起多线程所消耗的系统资源更少。


高性能

根据aLiLua开发者作的测试,由于 Lua 是调用 aLiLua 提供的 sendfile 方法发送页面内容,属原生 c 代码进行处理,所以性能明显高于 nodejs。占用的系统资源也因此会低于 nodejs,从 0~5000 并发情况看,其占用的资源跟并发数成正比,比较稳定。当与MySQL交换数据时,Lua 即使在 5000 高并发的情况下依然能保证很高的执行效率,而 nodejs 则不太稳定。

image.png

项目主页

aliLua还是一个新生的项目,目前大家可以尝试用aLiLua做些小应用,也欢迎大家为aLiLua贡献代码。


相关文章
|
12月前
|
存储 缓存 JavaScript
node 框架
Node 框架以其独特的优势和广泛的应用场景,成为了现代 Web 开发中不可或缺的一部分。掌握 Node 框架的开发技能,对于开发者来说具有重要的意义。
381 59
|
2月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
2月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
2月前
|
JavaScript 前端开发 开发者
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
6月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
2月前
|
JavaScript 前端开发 物联网
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
5月前
|
JSON JavaScript 前端开发
JavaScript入门干货:蓝桥杯Web组分章学习笔记(基于蓝桥云课《JavaScript基础入门》)
这是一份详尽的JavaScript学习笔记,涵盖基础到进阶内容。包括变量、运算符、数组、字符串操作,DOM/BOM事件处理,内置对象(如Array、Date、Math)用法,JSON格式解析,以及函数作用域与闭包等核心概念。同时深入探讨值类型和引用类型的差异、异常处理机制,并介绍函数高级特性如call/apply/bind方法、递归及arguments对象。代码按章节分点整理,注释细致,适合初学者系统掌握JavaScript编程知识。
111 2
|
12月前
|
Web App开发 缓存 监控
如何解决Node框架中内存管理的挑战?
解决 Node 框架中内存管理的挑战需要综合运用多种方法,并且需要在开发过程中保持谨慎和细心,不断优化和改进代码。同时,定期进行内存管理的检查和维护也是非常重要的。
234 63
|
12月前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
10月前
|
SQL 缓存 PHP
PHP框架详解 - symfony框架
Symfony框架凭借其灵活性、高性能和强大的社区支持,成为PHP开发领域的重要工具。无论是初学者还是资深开发者,都可以通过Symfony快速构建高质量的Web应用程序。通过深入理解Symfony的核心组件和最佳实践,开发者可以充分发挥其优势,提升开发效率和代码质量。
218 24