Lua新闻组的其人其事(二)

摘要: 我在去年写过Stefan Reich,晃眼一年就过去了,哎,这人也是个天涯沦落人,一年前的那段也许事出有因。http://luaos.net/pages/cant-do-it-anymore.php 阅读全文
posted @ 2012-11-18 22:08 风行水上 阅读(172) 评论(0) 推荐(0) 编辑

用Lua的coroutine在实现异步逻辑的妙处

摘要: 发现用coroutine处理登陆,交易等异步流程的问题非常简单清晰。同比c++的代码不需要state这个东西。直接上登陆的代码:function co_client_login(User) send_msg_to_loginserver() msg = wait_msg_login(User,{msg_loginserver_logined}) if (not msg.ok) then return end while(true) do msg = wait_msg_login(User,{msg_create_char,msg_del... 阅读全文
posted @ 2012-02-04 12:28 风行水上 阅读(2514) 评论(0) 推荐(0) 编辑

delete twice会导致throw bad_alloc.

摘要: 首先感叹下c++内存问题的复杂。昨晚同事发现了纠结的问题,一用lsocket(自己封装的socket),在数据库模块就发生bad_alloc,位置还相对固定;当时首先怀疑数据库1.new的size太大,结果pdb看参数没有2.怀疑堆栈破坏,看数据库模块看了半天,确实有一些c99的堆栈上分配,改之仍然不行第二天想到可能确实是内存耗尽,但是因为逻辑层用的是内存池并且用的是malloc,所以逻辑层不会crash;而只有数据库在分配内存。但是如果不用lsocket就没有问题,看来症结还是在lsocket上,反复一次次尝试精确定位到了close lsocket上,相反一直连着没事1。lsocket耗尽了 阅读全文
posted @ 2011-12-07 23:56 风行水上 阅读(655) 评论(0) 推荐(0) 编辑

Proactor和Reactor

摘要: 有人在新闻组上问,我回了下,有点不对题。我写过Windows下的IOCP,而在freebsd(或者posix系统)下的libevent仅仅是使用;我的感受是有理念上的不同。这种理论也比较像Windows和Unix的理念——最根本的:Windows下用多线程而Unix用多进程。我解释一下,为了发挥当今服务器多cpu多core的功能,当使用iocp时,系统会自动创建core*2个线程(核心态)来帮你做io的回调。而在UNIX一般是网关进程fork出自己的多个实例,在之后跟逻辑进程(可以是多个或一个)打交道。其中如果连接之间有交互的话,就说游戏吧,那么一般就是一个逻辑进程。就我在经验来看iocp—— 阅读全文
posted @ 2011-12-06 23:42 风行水上 阅读(898) 评论(0) 推荐(0) 编辑

Lua新闻组的其人其事(一)

摘要: Lua-L最近发生了点趣事与大家分享下。Stefan是一个想把lua引向mobile的人,他发帖《1》Let's make Lua mobile!-- Persistence: Uses Pluto.-- Safety: -- Untrusted non-frozen scripts should be fine (b/c of sandboxing). -- Untrusted frozen scripts should not be run. -- (No protection against bad bytecode or malformed Pluto images)其中提到了 阅读全文
posted @ 2011-11-30 23:55 风行水上 阅读(493) 评论(0) 推荐(0) 编辑

发布vsLua(Visual Studio 2010 - Lua Language Support )

摘要: 近来用lua开发了近两个月,深感'工欲善其事必先利其器',人家可以在vim上用tab补全,而我在vs2010没有智能感知,经常出笔误。vsLua已经1年多没有动静了,所以上周末自己拿来改了2天,又是第一个c#的project,磕磕碰碰不少,不过终于可以发布了。git host:git@github.com:yujiang/vsLua.gitThe origin of vsLua athttp://vslua.codeplex.com/I just do few work to make it run under vs2010, include:1. update the iro 阅读全文
posted @ 2011-11-30 12:19 风行水上 阅读(3076) 评论(2) 推荐(1) 编辑

大规模的lua开发

摘要: 之前使用lua一般用在c/c++程序的扩展,最近写了2个月的纯lua。有一些心得:1. lua非常灵活,function也是第一值(first class),所以不要硬套OO,虽然网上有很多lua支持OO的方法,但是我感觉that's not lua's way。并且使用object:func经常出错,容易写成object.func,如果你统一用object_func(object)就容易写对2. lua没有静态检查,所以typor——拼写错误太多了,这里感叹静态语言的优势,编译成功就扫除了很多bug,好在lua不需要编译(c++编译一个慢,如果改了.h文件可以去喝茶了),写错 阅读全文
posted @ 2011-11-15 18:21 风行水上 阅读(979) 评论(0) 推荐(0) 编辑

有感于c++混合lua开发游戏

摘要: 源于Mike Pall的一个帖子http://t.cn/SvuWk0,他举的第一个例子就是游戏开发,最初开发游戏肯定是c/c++了,当接触到lua这样的动态语言的时,确实很amazing;起初可以用来做配置——比xml好用多了;接着做特殊的扩展,比如服务器的脚本任务和活动,然后发现gui的处理放在脚本很方便,测试用脚本也爽,然后一股脑的能脚本的都脚本化,有的用的停不下来的感觉。最后发现我勒个去,卡了。就好像小时候看过一个笑话,一个书生做菜,人家告诉他要撒盐,撒了点盐,好吃,再撒点,更好吃,都撒上,结果没发吃了。第一次做成这样,也是没办法的,是经验问题,值得原谅。不过再次做一番设计,就需要谨慎。 阅读全文
posted @ 2011-11-13 18:42 风行水上 阅读(2071) 评论(0) 推荐(1) 编辑

AOI 其实可以做成中间件挺合适的

摘要: 这个也是最近才认识到,说起来有点顿悟的感觉。aoi不仅应该从游戏逻辑进程独立开,甚至应该跟游戏独立开,做成中间件的形式比如使用udp协议。其一,aoi的消息并不是必要的,允许丢包。其二,虽然即时游戏的aoi消息也要求一定的即时性,但是也不是极高的即时性。当然,有这个意识只是前提,真正实现aoi的协议还是需要一定的游戏经验;先记录在这里,有时间再尝试 阅读全文
posted @ 2011-11-02 23:24 风行水上 阅读(365) 评论(0) 推荐(0) 编辑

如何把lua的函数作为回调函数当参数传给c代码

摘要: 最近一段时间在lua的新闻组总是碰到这样的问题了。游戏中类似的问题很多,比如设置trigger,当玩家升级死亡的时候调用脚本函数。初级方法,全局的LuaState,全局函数,把函数名注册到trigger中去。进一步,希望支持匿名函数或者closure,那么用luaL_ref把函数记录下来并注册更进一步,希望支持coroutine,那么把LuaState和ref一起注册注意到,在coroutine也要记录注册的对象,在coroutine结束的地方需要取消注册。如果不这么做,而是武断的:co = nilcollectgarbage 'collect'此时当然会crash! 阅读全文
posted @ 2011-11-01 21:56 风行水上 阅读(2453) 评论(0) 推荐(0) 编辑