Node-Lua是一款基于Lua实现的脚本和服务器引擎,它支持构建海量Lua服务(Context_Lua)并以多线程方式运行在多核服务器上,采用了任务多路复用的设计方案,有效利用了多核优势。node-lua致力于构建一个快速、简单易用的Lua脚本和服务器开发和运行环境。该引擎参考了Node-Js和Skynet的设计思想,并对其进行了整合和优化。
该引擎当前版本实现了以下特性:
引擎核心层同时支持同步阻塞和异步回调的api设计方案,让异步io等接口更加简单易用。调用同步和异步api时引擎核心层将会自动挂起正在执行的lua函数(coroutine),直接放弃占用的cpu资源;
服务创建以指定lua文件为入口脚本文件,脚本直接运行在新服务的coroutine环境中,支持在入口脚本当中直接调用同步和异步api接口,支持无限循环调用同步api接口;
可以创建海量独立的lua服务(context_lua),引擎会根据当前运行服务总量和物理核心数量动态调整工作线程数量,当引擎没有需要处理的服务请求时(即任务队列为空),所有物理线程将会挂起等待,直到有新的任务(lua同步和异步回调)需要被唤醒运行;
支持在用户创建的lua coroutine中直接调用引擎提供的同步和异步api接口,对用户态coroutine执行不会产生任何影响;
引擎会检测进程当中有效的lua服务总量,当服务总量为0时,引擎会自动安全退出(可以用node-lua作为简单的lua脚本解释器使用)。同时,lua服务也会检测服务当中运行和挂起的同步和异步回调总量,当回调总量为0时,lua服务会被标记并安全退出;
引擎框架任务调度采用了线程任务队列的设计,减少了不同线程之间对任务资源的竞争。另外,任务调度也引入了work-stealing算法对调度进行了深度优化;
引擎提供了tcp socket相关的大部分api接口,同时支持unix_domain_socket;
引擎提供了lua服务相关的api接口,包括服务创建、销毁、通信等同步和异步接口;
引擎提供了定时相关的api接口,基本满足所有的定时设计,并直接被嵌入到了其它同步和异步api接口当中(tcp,服务相关的api等);
引擎提供了快速lua字符串缓存结构,可以用于高效的广播接口当中;
引擎当前提供了centos,macos,windows环境下的编译和安装;
Node-Lua在下个版本将会提供以下新功能和特性:
udp接口支持;
tcp和udp socket在lua服务之间的迁移;
在线服务热更新;
在线服务调试;
提供FreeBSD等环境下的编译和安装;
提供基准测试版本;
欢迎大家发现Node-Lua当中的bug,对Node-Lua提出更好的建议!
本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi ) 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/1289.html ☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您! width="150" height=
引擎核心层同时支持同步阻塞和异步回调的api设计方案,让异步io等接口更加简单易用。调用同步和异步api时引擎核心层将会自动挂起正在执行的lua函数(coroutine),直接放弃占用的cpu资源; 服务创建以指定lua文件为入口脚本文件,脚本直接运行在新服务的coroutine环境中,支持在入口脚本当中直接调用同步和异步api接口,支持无限循环调用同步api接口; 可以创建海量独立的lua服务(
cocos2d-lua 一.核心概念 场景:scene,在特定时间、特定地点发生的事件的集合,可以看作是一个容器,包含各种游戏的元素 层:图层(一个场景可以有多个层,一个场景至少有一个层) 精灵:sprite,在屏幕上移动的对象,它能够被控制。通常是可移动、能被控制的图片动画等。 Ui组件:界面上的元素 导演:director,游戏的总控,是一个共享的单例对象,可以在代码中的任何地方调用 节点**
今天的主题是关于cocos2dx lua实现短链接网络请求,使用Http实现基本的服务器网络数据获取,关于长链接(socket后续文件或者遇到需要的时候回特别实现与处理) 关于Http这里就不多做介绍了,不过,作为一个程序员,网络请求是开发中最多也是最重要的一环节,这里比较建议,搞懂http的整个请求流程! 在有了基本的Lua知识和cocos2dx lua基本的了解和学习之后,我有了一个初步的co
Lua 脚本功能是 Reids 2.6 版本的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。 本章先介绍 Lua 环境的初始化步骤, 然后对 Lua 脚本的安全性问题、以及解决这些问题的方法进行说明, 最后对执行 Lua 脚本的两
主要内容:一、Lua和Redis,二、运行机制,三、开发和应用,四、总结一、Lua和Redis 这篇其实和Redis本身的源码关系不是太大了,主要是看一下对REDIS的支持。Lua可能好多人都没有听说过,但是如果搞过网游的人,估计都用过,做为一种胶水语言,Lua对C/C++的支持非常友好,这是一般的脚本语言都没有做到的。它很小很轻量,所以非常容易与其它程序集成。在魔兽和仙剑等游戏中都广泛使用。 Lua的缺点也很明显,对开发支持的力度不大,功能也少,功能少,就意味着如果
主要内容:第一个Lua脚本命令,为什么使用Lua脚本,常用脚本命令,基本命令应用从 Redis 2.6 版本开始,Redis 使用内置的 Lua 解释器执行脚本,这意味着我们可以直接在 Redis 客户端执行Lua 脚本 ,于此同时 Redis 还非常贴心地提供了用于编写 Lua 脚本的 命令。 第一个Lua脚本命令 Lua 是一种轻量小巧、开源的脚本语言,用标准 C语言编写。其设计目的就是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它被广泛的应用于:游戏开发
问题内容: 我有一个简单的Lua脚本: 为什么此脚本阻止Redis服务器?如果我在另一个控制台命令中运行,例如:设置测试1,结果: 问题答案: Redis是单线程的。每个命令都会阻止它。也是命令,因此它会阻止redis。
下面是一个在前缀值为“bar”的键“foo”上调用脚本的示例(在redis-cli中): 我认为这种使用模式可能是这样的情况:您希望同时存储一个“Geofence令牌”和一个带有键的值...如果并发客户端持有正确的Geofence令牌,则允许它们尝试更新该值。 这看起来像是代替watch/multi/exec语义的安全使用模式吗?(似乎您可以获取当前值,在本地代码中拆分隔离令牌,构建一个新值,然后
问题内容: 我正在构建我的第一个Redis服务器端脚本( 用于调试 ),而我缺乏Lua经验使我非常困惑。 本质上来说,我有一个K / V对(包含〜1000个值)的数据集,我想从中列出所有与模式匹配的KEYS。例如在redis-cli中: 基于上面的输出,我想通过执行Lua脚本来返回这些键的总和。目前,我有以下内容 尽管以上脚本可能不正确,但即使单独尝试也会产生以下错误 root @ carlos: