Meme游戏服务器开发日记(一)目标

到了新的环境,老大让我有空研究下一代服务器技术,作为一个长期任务。

新的服务器想达到的目标:

1、分布式系统,对象(Entity)之间的关系类似于Actor模型。

2、逻辑服务,是单进程、多线程的,对象之间发消息进行通信,但是简单读取属性尽可能做到直接。

3、必须使用Python语言。开发方式类似于BigWorld引擎。

这个目标还是很宏伟的,只能从底层一步一步攻克。在这里记录一下解决问题的过程,既是分享,也是督促自己不要半途而废。

我个人极度喜欢skynet框架,由于很多原因,skynet框架几乎不可能修改为Python脚本。

原因除了众所周知的GIL(Python全局锁)问题以外,还有Python的Interpreter是极为重量级的,如果像skynet的独立lua_state那样使用,怕是什么都不做也能把内存全部用光。所以还是用普通的对象表示每个Entity,在进程内保存所有对象即可,逻辑进程之内,也并不存在“独立服务”的概念。

但是,在研究了skynet之后,我认为以后必然会大量参考skynet的成熟做法,甚至copy很多C语言层的代码。毕竟和高手对架构的理解,和C语言经验上,实在是差的太多。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 10:45:55

Meme游戏服务器开发日记(一)目标的相关文章

Meme游戏服务器开发日记(四)scons编译工具、C和C++混合使用

今天在编译python so时出现点问题--把其他C库链接到同一个so里--尝试了一早上发现了方法,已经更新到本系列的第二节里了. 整理了一下工程目录,打算用scons管理. scons毕竟是一种新型的build工具,比makefile肯定有很大进步,至少更清晰好学,少了很多晕晕的trick.但是相比其他高级工具比如cmake之类的,就不清楚优劣了. 这个例子写的过于简单了,正常使用时多用env,可以统一参数,简化编写. 例子: obj = Object( "test.c", CPPP

Meme游戏服务器开发日记(二)绕过GIL启动多线程Python环境

说道Python和多线程,很容易想到GIL,GIL意味着只要是用Python做的多线程程序,就无法利用多个CPU. 经过一些失败的尝试后,我也一度认为GIL是无解的.我们甚至把注意力转向了IronPython等无锁Python,但是实际上那样问题可能更多,比如我们不熟悉mono,mono也没达到完全成熟的程度. 直到skynet的QQ群里一位朋友介绍了另一种加载so的方式,事情才有了180度的变化. 方法如下: 1.编译Python源码,编译时加上参数--enable-shared,编译成so动

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

erlang 游戏服务器开发

http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以我的OpenPoker项目为例子,讲述了一个构建超强伸缩性的在线多游戏玩家系统.OpenPoker是一个超强多玩家纸牌服务器,具有容错.负载均衡和无限伸缩性等特性.源代码位于我的个人站点上,大概10,000行代码,其中1/3是测试代码. 在OpenPoker最终版本敲定之前我做了大量调研,我尝试了D

游戏服务器开发技术选型

开发语言的选择 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新. 当然,也有其他服务器开发语言,erlang(页游公司用的多),node.js(少量游戏用的,还有一个node.js写的引擎叫pemolo) 开源服务器引擎 1.firefly(9秒社团开发的一款python游戏服务器框架) 2.kbengine(作者说他按b

多线程游戏服务器开发(2)-编写网络库

网络库功能介绍 网络库具有的功能 1.具备多线程 2.监听某个端口 3.连接远程服务器 4.保存并管理所有链接,外部与网络库操作通过链接ID 5.向某个连接发送数据 6.强制关闭某个链接 7.网络事件回掉:connect, receive, close 8.错误处理 网络库主要接口(文件:tcp_frame.h) class tcp_frame { public: /** * tcp_frame 构造函数 * @handler 网络事件回掉(connect, recevie, close) *

手游服务器开发技术详解

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术.(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑. 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用. 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持

游戏服务器生成全局唯一ID的几种方法

在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使用全局的唯一id,在游戏服务器中,全局唯一的id可以用于将来合服方便,不会出现键冲突.也可以将来在业务增长的情况下,实现分库分表,比如某一个用户的物品要放在同一个分片内,而这个分片段可能是根据用户id的范围值来确定的,比如用户id大于1000小于100000的用户在一个分片内.目前常用的有以下几种:

游戏服务器架构-序

工作刚好快一年时间,自己经历了从完全不懂游戏的萌新到现在略懂一二的游戏服务器开发.为了做个纪念,也为了巩固和加深自己对游戏服务器的理解,在接下来的时间里,我会系统性的整理下服务器开发的相关东西,最主要是整体架构,细枝末节的技术性东西尽量少说,不然量太多.尽量争取让一个不懂游戏开发的菜鸟,看完我的文章后,能明白服务器开发是怎么回事儿,自己比划比划也能像模像样的写个简单的服务器出来.加油!