随笔分类 - lua
摘要:我的新手游项目很快就要进入到寻找发行商的环节,最近几天相对较空闲,逐将工作重心转移到服务器组运维工具的制作上.回想一年之前经历的那个不算成功的端游项目,因为运维工具设计得不合理,使用十分不方便,游戏上线之后搞得我焦头烂额的.之前一直没碰过web相关的技术,最近几天猛看了下php和javascript...
阅读全文
摘要:Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑.鉴于一般的手游对服务器端的压力不会太大,便将Survive用distri.lua框架重写了一便,distri.lua天生的支持协程,RPC和数据库访问直接使用同步接口...
阅读全文
摘要:最近在为distri.lua实现一个lua调试系统,有一个简单的需求,lua导入一个文件的时候,将这个文件的文件名记录下来,以方便调试器在设置断点的时候判断是否一个合法的文件.lua导入文件是通过luaL_loadfilex实现的,一个简单的思路就是修改luaL_loadfilex,在luaL_lo...
阅读全文
摘要:首先简单介绍下distri.lua中的线程设计方案.distri.lua提供一个API函数fork用于创建新的C线程,这个C线程运行独立的lua虚拟机,为了在各线程之间通信每个线程都会创建一个channel,用于接收其它线程发送过来的消息.这个channel内部实现为单向链表,为了将channel的...
阅读全文
摘要:为了更好的体现luanet的设计意图和避免与网上另一个开源项目重名造成混淆, luanet正式更名为distri.lua.后需开发工作包括跨平台,日志,通过Fork创建新线程正在开发中.新地址:https://github.com/sniperHW/distri.lua
阅读全文
摘要:测试环境 intel-i5 双核 2.53HZ 服务器客户端均在本机运行测试内容:echo回射,每个包的字节数在20字节内luanet连接数 每秒回射数 1 19,000/s10 12,5000/s100 12,0000/s100...
阅读全文
摘要:luanet最初只是一个网络框架,它简单的封装了一些网络相关接口然后暴露到lua中,让lua可以构建简单的网络应用.随着我的手游服务器的开发,我发现在C语言中要实现一个简洁易用的RPC调用接口并不容易,于是开始考虑将整个服务器框架从主C,辅lua的模式转变成主lua,辅C的模式.网络通讯,异步日志等...
阅读全文
摘要:最近在学习go,对go中网络处理的方式比较喜欢,就用lua coroutine + C 模仿着接口实现一个玩具玩玩.主要框架是lua导入C模块的时候会启动一个网络线程,lua和网络之间通过两个消息队列交互,lua将网络请求通过消息队列发送到C,C将应答和网络事件通过消息队列发送到lua.lua主线程运行在一个coroutine调度循环上,并不断的尝试从队列获得消息,一但收到消息就唤醒等待在此消息上阻塞的lua coroutine.跟go的区别是,go routine是可以在多个处理器核心上运行的.我在设计的时候也考虑过,是否将spwan函数也实现成多线程的,程序启动的时候开N个线程创建N个虚拟
阅读全文
摘要:以前曾经写过一篇为lua添加网络功能的博客,当然那篇文章提提供的lua网络接口纯粹是实验玩玩的,没有任何实用性.今天突然又想起了这件事,想用前段时间写的KendyNet为lua提供一套网络接口.这套接口是单线程的,通过PeekMsg获取网络事件,PeekMsg会在底层驱动epoll主循环.虽然也可以提供多线程的接口,在下面启动一个线程来驱动epoll,将事件提交到消息队列,由PeekMsg获取。但是,没人有会指望用lua写一个高性能的网络服务器,所以决定还是提供一个简单的接口,用来写写简单的小程序就可以了.首先介绍一下向lua提供的接口: lua_register(lState,"C
阅读全文
摘要:lua中默认的number类型是double的,在游戏中很多数据类型用到了64位整型,虽然可以通过重定义lua_Number为__int64以支持64位整型,但这又丢失了对浮点数的支持.好在可以很方便的往lua中添加自定义的类型,我的需求很简单,可以支持两个i64,或1个i64和一个lua_Number的基本算术和关系运算就够了.extern int newI64(lua_State *L);static const struct luaL_Reg i64Lib[] = { {"new",newI64}, {NULL,NULL},};class Integer64{publ
阅读全文
摘要:这是一个几年前写的对lua的访问封装,当时的项目仅提供了最基本的lua访问接口:调用lua函数,向lua注册标准格式的C++函数.本来我想引进luabind,但luabind相对又过于复杂,并不是所有功能都是我需要的,并且还要为此引入庞大boost.最终还是决定按需求编写一个简单的封装库.首先简单列一下我的需求:1)可以注册任意类型的C++函数到lua中2)可以方便的调用lua函数,方便的访问lua中的表3)可以访问lua中创建的对象,调用lua对象提供的方法4)注册C++类型到lua,使lua可以访问C++对象的字段,和函数下面介绍一下提供的一些API:1)call_luaFunction,
阅读全文
摘要:以前写过一编博客介绍我们游戏的AI服务器。基本的结构就是利用windows的fiber,在每个fiber中运行一个lua虚拟机,具体的内容可以产参看http://blog.csdn.net/sniperhuangwei/article/details/5425471但这个方案有一个缺点,就是随着项目的推移,AI脚本变得越来越复杂,每个虚拟机占用的内存就变得越来越大。当一个进程上运行的AI对象数量很大时这个进程就吃掉了非常大的内存。经过一番考量,我决定不使用windows的fiber来支持用户态线程调度框架,而是改用lua的coroutine.这样整个进程只需要维护一个lua虚拟机就够了,即使A
阅读全文
摘要:lua没有提供专门的调试器,但却提供了一些接口函数,用以实现你自己的调试器。下面实现了一个简单的基于命令行的lua调试器,提供一些最最基本的调试功能。这里面只用到了3个基本的lua调试函数,debug.sethook,debug.getlocal,debug.getinfo.函数的具体用法和功能可以参照lua手册。下面是简单的实现代码:Command.h#ifndef _COMMAND_H#define _COMMAND_H/*命令定义说明命令 参数start filename :启动执行一个lua文件list/l filename :显示文件内容brea...
阅读全文
摘要:concurrentlua的makefile只提供了unix下的版本,如果直接按make里面得拷贝路径安排文件在windows下是无法凑效的。这里我把我在windows下安装concurrentlua的经验分享一下。首先,我把lua的根目录设置为d:/lua.下载concurrentlua,luasocket,copas,coxpcall,对于luasocket的安装很简单,编译dll.在root(d:/lua,以后都以root替代),创建socket,mime两个目录,将socket.dll和mime.dll分别拷到对应的目录,然后重命名为core.dll.将ltn12.lua,mime.l
阅读全文
摘要:上一篇文章中,自己为lua提供了一个简单的网络接口功能以实现以个echo服务。昨晚在网上查阅lua网络相关的库,发现了luasocket,于是也用luasocket实现了一个echo服务以作比较.要使用luasocket首先到http://luaforge.net/projects/luasocket/下载luasocket.下面是代码tcpechosrv.lualocal socket = require("socket")local server = assert(socket.bind("*", 0))local ip, port = server
阅读全文
摘要:为了向lua添加网络处理网络消息的能力,需要把网络相关的一些接口注册到lua中。这里采用生成C dll的方法。首先导出一个C函数,这个函数用于把所有的网络接口函数注册到lua中。注意这个dll中的函数要用纯C编写。netinterface.c/** author: kenny huang* email: huangweilook@21cn.com* brief: 向lua注册一简单的网络接口,在lua中实现简单的网络功能* 网络部分代码采用了windows网络编程中的一个例子*/#include <winsock2.h>#include <windows.h>#incl
阅读全文

浙公网安备 33010602011771号