H2engine的GitHub星星不知不觉已经破百了,也没有特意推广过,但是慢慢的关注的人越来越多。因为事情多,好久没有写东西了,前一段时间有了一些想法,把h2engine又更新了一下,感觉h2engine又向前迈了一大步。本文记录一下最近的心得体会,以及做出的相应修改。

关于RPC

H2engine的rpc部分使用的是原来fflib的ffrpc组件,ffrpc设计的比较强大,但是因为h2engie的架构特点,ffrpc的一些功能用不到,很多网友都询问我关于rpc部分的设计问题,我仔细思考后觉得确实可以把h2engine的rpc部分进行简化,这样对于使用者而言更容易理解。
先看一下h2engine的架构:

  • H2engine设计的为单gate,单服环境内linux下一个gate完全能够满足性能要求,Apache/nigx都是一个进程不是吗?单gate让分布式的结构大大简化。我们知道一般单服架构都有个loginserver,现在可以省略了,因为单gate,每个服直接配置gate地址。
  • H2engine为多进程架构,但是h2engine限定了采用伪分布式的设计,虽然gate和gameserver通过网络通信,但是限定了gate和gameserver在一台机器上。虽然gate和gameserver放在不同机器上也可以通信,但是我们从现实运营的情况出发,很少运维会把gate和gameserver放不同机器上,一般有的时候一台机器上甚至有多个服。所以伪分布式是既能满足需求又能大大简化架构的一个设计。
  • 采用伪分布式设计后,gameserver之间就可以利用共享内存了,全局的数据比如排行榜、行会、好友、组队等,这些模块都是分布式进程中最费时费力容易出错的,但是在h2engine里变得逻辑清晰,直接操作全局内存就可以了,全同步。
  • Rpc模块进行了简化,其实rpc通信分三种,gate调用gameserver接口,gameserver调用gate接口,和gameserver与gameserver之间调用,发现没,所有架构内rpc都需要通过gate,而且h2engine是单gate伪分布式(127.0.0.1速度飞起),那么整个rpc结构就变得非常清晰简单,感兴趣的可以看下gate的broker文件和rpc文件。这两个文件一个是gate端中转,一个是请求端封装,非常简洁。
  • 网络层进行了升级,原来socket是裸的指针,很多网友还是表达了不知道什么时候应该调用safedelete的问题,所以还是改成了智能指针,不需要关系socket什么时候释放。另外socket的私有数据进行了泛型封装,可以存入任何私有数据类型。
    共享内存的简单示意:

关于跨平台

2engine一直是只支持linux下编译,Windows的移植一直没有时间弄,虽然行业内大部分服务器都是跑linux的,但是如果可以Windows下可以开发调试,那对于提高平常的开发效率来说将会大有裨益。
2engine由于一开始是在linux下gcc下开发的,那么在Windows下也用gcc,那么需要修改的跨平台代码将会非常少,本着这个思路,h2engine成功移植到了Windows,并且改动的非常少。

  • Windows下的虽然有mingw直接包含了gcc环境,但是想用上cmake等编译工具还是挺麻烦的,所以我找了一个集成mingw且算得上比较流行的一个Windows IDE:CodeBlocks。见了一个CodeBlocks的项目,想要在Windows下运行只要下载一个CodeBlocks,然后双击工程文件就可以了。
  • 编译h2engine需要依赖openssl、curl、mysql、lua、python2.7,依赖文件都放到windependency文件夹里,包括运行的dll。
  • H2workerlua在Windows下用的lua5.1
  • H2workerpython在Windows下用的python2.7
    注意:CodeBlocks调试需要安装python2.7,setting->debugger->default 里executable path设置为 C:\Program Files (x86)\CodeBlocks\MinGW\bin\gdb32.exe

    关于C sharp

    H2engine的c#版本正在紧锣密鼓的开发中,大家拭目以待。
    相关连接

  1. 文档 http://h2cloud.org
  2. 源码 https://github.com/fanchy/h2engine

游戏服务器h2engine架构优化和跨平台设计的更多相关文章

  1. Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计

    前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...

  2. C++游戏服务器的性能优化

    以下只是某次项目的一次经历,最终并没有按照这样的方案来优化,但对思路方面确实是一个提高,所以记录在此. ------------------------------------------------ ...

  3. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  4. h2engine游戏服务器设计之聊天室示例

    游戏服务器设计之聊天室示例 简介 h2engine引擎建群以后,有热心网友向我反馈,想尝试h2engine但是没有服务器开发经验觉得无从入手,希望我能提供一个简单明了的示例.由于前一段时间工作实在忙碌 ...

  5. H2Engine游戏服务器设计之属性管理器

    游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...

  6. FPS游戏服务器设计的问题 【转】

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

  7. (转)FPS游戏服务器设计的问题

    FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...

  8. 游戏服务器设计之NPC系统

    游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...

  9. 同一世界服务器架构--Erlang游戏服务器

        Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间 ...

随机推荐

  1. Django+xadmin打造在线教育平台(九)

    目录 在线教育平台(一)      在线教育平台(二) 在线教育平台(三)      在线教育平台(四) 在线教育平台(五)      在线教育平台(六) 在线教育平台(七)      在线教育平台( ...

  2. 源码分析Session的台前幕后(Asp .Net MVC5)

    在这篇文章里,我们从源代码的角度重点分析Session的创建.缓存.销毁.管理. 通常我们说的Session指的是在控制器中使用的Session字段,该字段的类型是HttpSessionState.可 ...

  3. 浅谈通信网络(三)——TCP/IP协议

    简介 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.In ...

  4. Redis数据结构简介

    Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为STRING(字符串).LIST(列表).SET(集合).HASH(散列)和ZSET(有序集合).有一部分Redis命令对 ...

  5. Spring Boot Hikari

    Guys, I got the following properties to work, kind of. The following creates 2 pools. One connection ...

  6. SpringMvc 这篇文章写得不错 多多学习2017.6.29

    http://www.cnblogs.com/bigdataZJ/p/springmvc1.html  博客园链接

  7. ECMAScript 6 入门 ----Generator 函数

    本文转自:阮一峰老师的ECMAScript 6 入门,有时间可以看下评论! Generator 函数 简介 基本概念 Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不 ...

  8. CSDN Android客户端的制作 导航帖

    弄个导航贴,把相关知识来个汇总. CSDN Android的客户端的效果图: 分别通过以下博客进行详细的讲解: 1.Android 使用Fragment,ViewPagerIndicator 制作cs ...

  9. Kafka元数据缓存(metadata cache)

    经常有人问的一个问题就是:Kafka broker到底是不是无状态的?网上有这样的说法: 正常情况下consumer会在消费完一条消息后线性增加这个offset.当然,consumer也可将offse ...

  10. .net core下使用Thrift

    因网站组(.net)与游戏服务端(c++)原来使用REST API通讯效率稍显低下,准备下期重构时改用rpc方式,经比较Thrift和gRPC两者的优劣(参照网上的对比结果),最终决定使用Thrift ...