摘要: FFLIB框架拥有如下的特点:使用多进程并发。Broker 把Client 和Service 的位置透明化, Service 的接口要注册到Broker, 所有连接Broker的Client 都可以调用(publisher/ subscriber),远程调用必须绑定回调函数,利用future 模式实现同步,从而支持单元测试,消息定义规范简单直接高效,所有service的接口性能监控数据自动生成,免费的午餐,Service 单线程话,更simplicity 阅读全文
posted @ 2012-07-30 19:52 知然 阅读(31257) 评论(15) 推荐(4) 编辑
摘要: Chaos是一个基于Linux平台, reactor模式的网络事件库, 目前仅支持TCP传输协议, 仅在x86_64下编译, 并遵循3-clause BSD开源协议. 在使用上, 可以说它很像boost asio, 可能是由于我对boost asio的接口设计很有爱吧, 而且对于boost asio在异步编程方面的思想, 我个人也比较认同, 但至今我也没有仔细阅读过boost asio的源码, 一是boost的模板化编程在可读性上让我比较折磨, 其二则是不想在对设计先入为主的情况下去开发chaos, 很多事情只有我们自己亲自去思考, 才能有所收获. 进入主题, 关于chaos库源码和所有测试用例和应用服务, 都在https://github.com/lyjdamzwf/chaos下载 阅读全文
posted @ 2012-07-04 14:25 知然 阅读(4297) 评论(0) 推荐(2) 编辑
摘要: 后台程序开发一个专门统计性能的组件,其需要有如下功能: 可以汇总性能数据,如定时将1小时内说有接口调用开销、次数等数据汇总到文件 可以非常方便的与逻辑层接口集成,比如在现有接口增加一行代码即可 直观的报表,性能数据写入文件必须按照通用的格式,方便工具分析数据,生成报表 阅读全文
posted @ 2012-06-06 22:56 知然 阅读(20032) 评论(6) 推荐(13) 编辑
摘要: 在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率:并发,异步,缓存 下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点 阅读全文
posted @ 2012-05-13 18:59 知然 阅读(74717) 评论(8) 推荐(11) 编辑
摘要: 写了个脚本, 用于调试服务器消息传输 阅读全文
posted @ 2012-05-07 23:57 知然 阅读(1549) 评论(0) 推荐(0) 编辑
摘要: 比如要实现一个模型为人人们推荐购买哪一款手机。为简化模型我们只基于协同过滤做推荐(洒家也是在推荐系统论坛长期潜水之人,常用的推荐策略还是略知一二的)。举个例子,已知A、B二人,A是月薪15k年龄28的帅哥,而B是月薪3K的年龄23的实习生,还知道A购买了Iphone, 而B购买了小米。如果C是月薪13K年龄27,那么你十分有可能和A进行相同的选择,也去购买Iphone。数学上认为C的函数值更解决于A。这就是k-NN最近邻规则的思想,找到和目标属性最接近的样本,并把它们归为同一类别。物以类聚,人以群分 阅读全文
posted @ 2012-05-02 22:00 知然 阅读(2324) 评论(2) 推荐(0) 编辑
摘要: 在人工智能中有一类问题是有确定解的,如路径、五子棋等,这样的问题非常适合使用搜索来解决。 路径搜索是一个很有趣的问题,在人工智能中算是很基础的问题。最近一直在读《Artificial Intelligence-A Modern Approach》,搜索部分看完印象最深的就是A星算法了,这个在游戏开发中也最常用。于是乎做个总结. 阅读全文
posted @ 2012-04-04 11:51 知然 阅读(6829) 评论(8) 推荐(6) 编辑
摘要: 游戏开发中,经常会越到千奇百怪的Bug。后台程序都是以demon 方式运行,要么GDB,要么Log。一些确定性的bug可以直接使用GDB调试,比如特定请求会Crash。如果是运行一段时间,Bug才会出现,无明显规律,那么也只能使用Log了。但是从成千上万条日志中Grep、分析、定位,然后修改代码、测试,这个过程效率极其低,有的时候挫折感倍强,想骂娘都。经过一些总结后,我们希望程序能够具有完整跟踪用户行为的功能。用户的行为被完整的记录下来,针对领域对象提供类似“快照”的功能,当程序出现问题时,我们可以从某个正确的“快照”为起点,回放用户的操作,这样Bug可以被重现,修复bug后也可以通过回放用户操作来验证正确与否。 阅读全文
posted @ 2012-03-18 22:12 知然 阅读(6785) 评论(8) 推荐(2) 编辑
摘要: 在网络游戏中,cliet和服务器是通过tcp长连接的。相对于HTTP+WebServer的不同在于: client连接到服务器,需要进行身份验证,通常是client第一个消息包含身份验证数据如用户名密码等,而验证通过后该连接为可信任连接。 client 任意时间都可以向服务器发送请求,而不需要服务器立即返回,同样,服务器是在任意时间(当然会有实时性等约束)都可以像client推送消息。 client断开连接时,服务器必须捕获该事件,以便完成一些数据清理操作。 client对应的一般是个集群,但是client无从得知细节,因为它只连接最外层的一个,给他取个名字“MsgBroker”。 Msg Broker 不许有一定的安全控制,如心跳、网络包频率限制等,防范某些可能的攻击。 Msg Broker需要高度可定制。不同的游戏主要是逻辑不同,而MsgBroker大多大同小异。当然MsgBroker总是会根据需求稍作修改。 Msg Broker 主要瓶颈是IO操作,因为它涉及大量的网络连接、断开、心跳、广播消息等。而它具有的领域逻辑则非常非常少。所以Msg Broker的逻辑可以使 阅读全文
posted @ 2012-03-11 21:55 知然 阅读(3996) 评论(0) 推荐(5) 编辑
摘要: 前一篇blog 讲了如何实现IDL 解析器,本篇通过IDL解析器构建一个聊天服务器程序。本程序用来测试IDL解析器的功能,网络层使用前边blog中介绍的ffown库。我们只需定义chat.idl文件,idl解析器自动生成消息排放代码,省了每次再去繁琐的编写消息解析、判断代码。 阅读全文
posted @ 2012-02-28 08:58 知然 阅读(3193) 评论(3) 推荐(2) 编辑