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贡献代码。


相关文章
|
11月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
593 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
485 1
|
7月前
|
SQL 敏捷开发 安全
PHP 的精髓:灵活高效,为 Web 而生
PHP 的精髓:灵活高效,为 Web 而生
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
460 20
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
278 13
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
422 0
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。