摘要: 也许你已经了解了FFLUA的设计原则,即:当在编写C++代码时,希望使用LUA就像使用C++本地的代码一样,而在lua中操作C++的数据和接口的时候,又希望C++用起来完全跟table一个样。这样可以大大减轻程序开发的工作,从而把精力更多放大设计和逻辑上。那么做到如何lua才算像C++,C++做到如何才算像lua呢?我们知道二者毕竟相差甚远,我们只需要把常见的操作封装成一直即可,不常见操作则特殊处理。常见操作有: C++ 调用lua函数,FFLUA已经封装了call函数,保障了调用lua函数就像调用本地C++函数一样方便 C++注册接口和对象到lua中,lua中操作对象就像操作table一样直接。 C++中除了自定义对象,STL是用的最多的了,C++希望lua中能够接收STL的参数,或者能够返回STL数据结构 Lua中只有table数据结构,Lua希望C++的参数的数据结构支持table,并且lua可以直接把table作为返回值。 C++的指针需要传递到lua中,同时也希望某些操作,lua可以把C++对象指针作为返回值 阅读全文
posted @ 2013-01-27 11:50 知然 阅读(8578) 评论(28) 推荐(9) 编辑
摘要: 我们需要一个具有如下功能的日志组件:  用于调试可以显示、记录变量、数据,即能支持像printf一样可以实时的在控制台输出显示,又能将记录存储文件,方便搜索查看历史记录  日志应该拥有良好的格式,即方便开发和运维人员的阅读,又要包含足够多的信息,例如事件记录时间、线程id、事件类型,事件的严重级别  日志文件应该被良好的组织,一方面日志应该按照每天单独文件夹分类,另一方面日志日志文件并应该过大,否则使用编辑器打开、搜索将会非常困难。日志内容也应该组织分类,比如数据库的操作日志和用户做任务的日志应该有明确的标志,这样可以对日志文件进行grep等进行过滤分类查看。  日志文件必须非常容易配置,当调试时期望看到尽可能多的内容,但是不关心的内容需要被过滤掉,比如调试用户任务模块时,可以不显示数据库相关日志。在上线后,运维只关心报错信息,比警告级别低的日志需要被屏蔽。在调试时,开发人员经常会盯着控制台的输出,相比于普通级别日志内容,错误级别的日志更应该引起开发注意力,所以重要级别的日志在控制台输出时应该有彩色高亮显示。  日志组件必须有高效的性能,一方面调用者期望日志组件调用 阅读全文
posted @ 2013-01-20 19:47 知然 阅读(3904) 评论(6) 推荐(4) 编辑
摘要: 很多场合之所以使用C++,一方面是由于C++编译后的native code的高效性能,另一方面是由于C++优秀的并发能力。并行方式有多进程 和多线程之分,本章暂且只讨论多线程,多进程方面的知识会在其他章节具体讨论。多线程是开发C++服务器程序非常重要的基础,如何根据需求具体的设计、分配线程以及线程间的通信,也是服务器程序非常重要的部分,除了能够带来程序的性能提高外,若设计失误,则可能导致程序复杂而又混乱,变成bug滋生的温床。所以设计、开发优秀的线程组件以供重用,无论如何都是值得的。 阅读全文
posted @ 2013-01-14 22:34 知然 阅读(39462) 评论(15) 推荐(5) 编辑
摘要: 尽管C++ 野指针和内存泄漏一直被诟病,但是在实时性很强的应用场合,c++ 仍然是不二之选。游戏服务器开发仍然使用c++ 作为主语言,但是大多结合动态脚本技术,一方面规避了野指针和内存泄露,一方面获得了开发效率和扩展性的红利。但脚本技术不是本文的讨论重点,事实上关于c++ 与 lua的技术文章我也一直在整理中,将会另文别述。今天主要说说在使用c++过程中,如何避免和解决野指针和内存泄漏问题。 阅读全文
posted @ 2012-12-22 21:54 知然 阅读(5632) 评论(6) 推荐(4) 编辑
摘要: 一直想完成隐马尔科夫这篇,一是一直没有时间完成python的示例实现代码,二是想找一个区别于天气的隐马尔科夫例子。区别于贝叶斯,隐马尔科夫模型是基于时序的概率模型,本文只关注于一阶隐马尔科夫模型,即某一时刻的状态值只跟上一时刻的状态值有关。该模型可以用三元组表示:λ = (A, B,π ), 其中: A:为状态转移概率矩阵 B:为观察概率矩阵,或称为概率矩阵 π:为初始概率矩阵 阅读全文
posted @ 2012-12-15 23:42 知然 阅读(8997) 评论(9) 推荐(3) 编辑
摘要: 使用FFLIB 构建了一个demo,该demo模拟了一个常见的游戏后台架构,该demo主要有一下亮点:  FFLIB 实现进程间通信非常方便  基于CQRS 思想构建LogicServer  使用Event Publish/Subscribe, 实现各个模块的解耦合  基于Event 实现实体对象的单元测试,在你gtest中,利用event做mock, 同时利用event 做验证,单元测试就是一个Given(event,先提供条件), When(Command, 触发操作), Expect(Event, 期望结果是否发生)。 阅读全文
posted @ 2012-11-18 22:32 知然 阅读(1941) 评论(2) 推荐(2) 编辑
摘要: 朴素贝叶斯基于贝叶斯定理,它假设输入随机变量的特征值是条件独立的,故称之为“朴素”。朴素贝叶斯分类实现简单,预测的效率较高。本文提供了基于Python的示例实现。 阅读全文
posted @ 2012-09-22 17:52 知然 阅读(3264) 评论(1) 推荐(1) 编辑
摘要: 排行榜是游戏组件中必不可少的组件,设计一个可重用的排行榜是必不可少的,一个排行榜系统需要满足如下要求: 排行榜一般是限制名次的,比如只为前100 名进行排名 排行榜一般会有多种,比如等级排行榜、金币排行榜等 有时排行榜需要定时更新,有时需要实时更新 阅读全文
posted @ 2012-09-10 23:40 知然 阅读(3576) 评论(4) 推荐(1) 编辑
摘要: 在FFLIB的两篇介绍中,已经介绍了FFLIB是基于Broker模式构建的框架,比较明显的瓶颈是Broker 只有一个。在Client 和 Service 节点不断增多的情况下,单个Broker 将会无法承载。所以本文将探究如何扩展FFLIB 。其解决之道也很直接,就是增加Broker 。为了能够为FFLIB 增加Broker 节点, 参考了Mysql 中的Master/Slave 结构, 设计FFLIB 的多Broker 框架如此如此...... 阅读全文
posted @ 2012-08-19 10:28 知然 阅读(5402) 评论(2) 推荐(1) 编辑
摘要: 我进一步挖掘FFLIB的功能。写一篇FFLIB的Tutorial。创建更多的FFLIB使用示例,以此来深入探讨FFLIB的意义。在游戏开发中,或者一些分布式的环境中,有许多大家熟悉的模式。,本文挑选了如下作为FFLIB示例:Request/Reply,点对点通讯,阻塞通讯,多播通讯,Map/Reduce 阅读全文
posted @ 2012-08-08 21:48 知然 阅读(6271) 评论(0) 推荐(1) 编辑