一个别人的心得(转发的)

转发:http://blog.csdn.net/mayao11/article/details/7552384



需求是:一种移动或web游戏的服务器,要求是尽量保证维护简单,框架尽可能简洁,代码量不宜过多;考虑1人非全职进行服务器维护,不应对运维造成太大难度。

首先,必须使用RakNet,可用的游戏服务器框架很稀有,这是其中一个开源框架,底层提供完整的可靠UDP协议,上层有完整的封装,不得不用。

其次,客户端采用C++、Lua编写,其中逻辑部分完全使用Lua编写。服务器需要做一部分验证工作,所以应当部分复用相关逻辑。

技术试验结论如下:

1、利用HTTP服务器建立游戏服务器。非常简单粗暴的思路,做起来很快,但是在HTTP服务里服务器无法主动发出请求,所以某些交互方面的需求几乎不可实现。经讨论放弃。

2、RakNet完全采用C++编写,维护难度适中。RakNet的Patcher服务器官方建议采用PostgreSQL作为数据库,原因是MySQL的部分功能支持不正常。比如截取数据库里超长字符串其中的一段会非常的慢。

3、DB中间件(ORM),可选择范围:C++库可选ODB,Python库可选SQLAlchemy。

4、接口生成器SWIG。用于将C++的库(例如RakNet)全部半自动化注册到其他语言,经试验难度适中,可行。尚存在问题:回调函数的注册,远程过程调用RPC的注册还没有调查过。

5、Python的使用方式有两种:一是将C++的底层库完全注册给Python使用,另一种是让C++调用Python模块的接口。

6、Lua的技术实现上预计不存在太大问题。服务器端逻辑相关代码基本确定采用Lua编写。

7、早上的新发现:Lua与Python混合编程:Lunatic Python。 Being two-way means that it allows Lua inside Python, Python inside Lua, Lua inside Python inside Lua, Python inside Lua inside Python, and so on. 霸气侧漏。不知道你敢不敢用,我反正敢用。另外有Lunatic Python的Lua-jit优化版本:lupa。网址分别为:

http://labix.org/lunatic-python

http://pypi.python.org/pypi/lupa/0.9

8、早上的新发现:Cython。支持用一种特制的语法编写看起来是Python,实际是C的代码,之后可以将其编译为C语言级别的动态链接库。在数学运算、函数调用方面极大降低开销,加快速度。可以用在项目中后期优化的时候。特此记录。

重要优缺点介绍:

1、C++的ORM库ODB据百度说是最佳选择之一,但仔细研究了一整天帮助手册和实际试验,发现此库要求用户使用C++11的新特性,大量使用#pragma等编译器特殊语法,Table的关联是用多种不同类型的智能指针实现的。并且此库底层提供了类似boost的改装库,提供了比boost更丰富的智能指针例如lazy_shared_ptr。这些高级功能必然会被使用到。(我很想说:这货不是C++。)

此外,由于C++需要被编译,所以ODB在使用时不是完全自动化的,其使用分解为两大步:分析头文件生成胶水层、然后编译链接用户代码和胶水层。

2、SQLAlchemy使用上非常简单,可以通过简单设计实现数据库初始化、操作一体化。且本人对Python的了解程度远高于C++11、boost等。其致命缺点在于一旦采用Python相关技术,势必要在C++/Python接口上下很多功夫。

3、SWIG的致命问题在于——移植库的过程是一个考验C++/其他语言语法基本功的过程,非常有挑战。实现难度:4星半,但可以一试。

计划在上述条件下设计服务器框架,目前剩余问题是C++如何用简单的方式调用Python接口。预计今日(2012-5-10)晚得出结论。

——————————————————————————————————————————————————————

结论:完全使用 Python + Lua(Lunatic Python)编写服务器

其中,RakNet库用SWIG将重要接口全部注册给Python,直接用Python编写高性能服务器!移植时有一些高级特性需要仔细看SWIG的在线文档,已试验通过。欢迎交流。

时间: 2024-10-19 02:40:23

一个别人的心得(转发的)的相关文章

怎样建一个别人删不掉的文件夹

相信大家都遇到过自己的一些隐私文件不愿意让别人看到的情况吧,怎么解决呢?隐藏起来?换个名字?或者加密?这些办法都可以办到,其实还有一种方 法,就是建立一个别人既不能进入又不能删除的文件夹,把自己的隐私文件放进去,别人就看不到啦,下面讲讲如何实现,很简单的.在运行中输入cmd,回车,打开命令行窗口,在命令行窗口中切换到想要建立文件夹的硬盘分区,如D盘就输入D:.回车后继续输入 MD 123..\ 回车,注意文件夹名后有2个小数点. OK,搞定,看看你的D盘下面是不是多了一个名为123.的文件夹了?

建一个别人打不开的文件夹

怎么创建一个打不开的文件夹,文件夹打不开 相信大家都遇到过自己的一些隐私文件不愿意让别人看到的情况吧,怎么解决呢?隐藏起来?换个名字?或者加密?这些办法都可以办到,其实还有一种方法,就是建立一个别人既不能进入又不能删除的文件夹,把自己的隐私文件放进去,别人就看不到啦,下面讲讲如何实现,很简单的. 在运行中输入 cmd ,回车 ,打开命令行窗口 在命令行窗口中切换到想要建立文件夹的硬盘分区,如D盘 输入 MD 123.. \ 回车,注意文件夹名后有2个小数点 OK,搞定,看看你的D盘下面是不是多了

进入国企一个月的心得!

2016年10月13日到现在,进入公司已经有一个多月了,这是我的第二份工作,所以我更加珍惜当前这份工,这也是我第一次进入国企工作,记得第一天早上报道时先是签了合同什么之类的,之后快到了11点,人事负责带我去自己的位置,我们这个团队一共四个人,其实我觉得一个团队人数可以不用太多,三四个就刚刚好,组长对我们都很好,接下来就布置给我一些简单的任务,顺便熟悉一下正在开发的项目,我心里觉得来对地方了,因为上个公司的缘故,我觉得这家公司才是真正属于我的地方... 在一个月的时间中,我也渐渐的对公司的业务有了

java工程师之旅-一个月工作心得

不知不觉,在工作中已经度过一个月,距离上次写文章已经好几个月了,正好还有二十分钟下班,抽点时间来写一下博文,写一下心得. 首先说一下,在我工作之前,做了一个项目,和一个外校大四的学生做一个毕业设计,一个随堂APP,如果大家想要看看的话我在后面贴上git 在后来,这个项目给我的面试带来了很大的加分. 我的面试很运气,我第一次面试,面试的是一个小公司,做金融的,只有一个技术主管来面我,我第一次面试,很紧张啊... 问的大部分都是简历上写的一些技术点,还好当初没有吹牛逼把很多高大上的技术写上去,这一点

学习一个月的心得体会

在这一个月里面,我们学习了面向对象的思维模式,不得不说,它是难点,对于我们来说,也是基础和重点需要用心去努力的地方. 由于我们学习的时间不长,所以分享的东西并没有多少,现在,我才学习到字段,属性,对象通信,递归等多方面的运用和理解,就我个人来说,还算是跟得上老师的进度,不过,不理解的方面还是挺多的. 最新学习到集合和foreach循环,程序是如此的多变与灵活,如果你一个不注意,或许连你自己都不明白你写出的是什么,毕竟代码的大量重用导致的思维混乱是很正常的. 加油吧,祝我自己都在这条路上走的不是越

分享一个项目实施心得

前言: 我一直在考虑,是否把这篇文章开放出来,因为曾经有一个项目,实施得不顺利,计划三天实施完成,结果实施了三个周,才勉强把该做的工作做完,工作延期这么久,其中有软件,硬件,团队沟通与配合等众多原因,我也应该好好反省自身的问题.这个项目的软件由二个web开发小组,一个android开发小组,一个硬件 http://p.baidu.com/itopic/main/qlog?qid=04246162633463326339663600&type=questionloghttp://p.baidu.c

打开一个别人的代码遇到的问题

直接入主题: 我打的代码的源文件链接 http://pan.baidu.com/s/1dDdSpbz   直接打开后SmartServerPlus!.ext  因为端口的问题不能访问,具体的方法 看到这个图片,原因是要设置本地端口地址 如图便可以访问,访问后界面不是很好看,目前没有想到解决的办法

小白的学习心得

关注前端这么久,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学习之路是比较好的.学习没有捷径,但学习是有技巧与方法. 一,css入门篇: 推荐书籍:css哪些事儿,精通css. 理由:css那些事儿,他是一本介绍css基础类的书,是入门的经典读物. 系统的介绍了css的选择符,伪类,工作环境,盒模型,两列,三列自适应布局.文字样式,图片处理,列表,表单,还有选项

从DNS基础到在CentOS6.5上“玩着”搭建一个支持正向、反向解析的“

1.什么是DNS? (Domain Name System)域名系统. DNS其实实现的功能很简单也很有效,它能够让用户可以不用记得那些经常要访问服务器的ip地址,直接要你输入类似拼音格式的就可以访问到那些数字串的ip地址.假设以61.120.155.14(举个例子),我们总是用这些数字进行网页服务器的访问岂不是很蛋疼,毕竟很多人还是对文字甚至拼音字母更容易让正常人记忆.这就是DNS的功能. 当然,它不仅能把那些你输入的拼音字母转换成ip地址的数字串,它还支持把那些数字串转换成你想访问的实际的网