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. oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中

    有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...

  2. HTML学习笔记8:表单

      什么是表单?     一个网页表单可以将用户输入的数据发送到服务器进行处理.因为互联网用户使用复选框,单选按钮或文本字段填写表格,所以WebForms的形式类似文件或数据库.例如,WebForms ...

  3. 浅谈面试中的OOD面向对象设计问题

    转载自:http://baozitraining.org/blog/Object-oriented-design-question/ OO设计问题是电面或者onsite中常考的问题,尤其对以Java为 ...

  4. Java核心卷笔记(一)

    第三章Java基程序设计结构 1.注释 三种注释方式: // 注释单行 /* 内容 */ 注释单行 /** * 内容 */ 2. java 数据类型 Java数据类型可分为两种:基本数据类型和引用数据 ...

  5. 团队项目第二阶段个人进展——Day9

    一.昨天工作总结 冲刺第九天,完成图片的优化,与队友一起讨论如何合并并优化 二.遇到的问题 无 三.今日工作规划 合并后优化

  6. QPropertyAnimation实现图形,控件的旋转和位移动画,尤其是旋转

    QPropertyAnimation可以简单方便的实现对象的旋转和移动的动画效果. 1. 移动 Pixmap *item = new Pixmap(kineticPix); QPropertyAnim ...

  7. laravel5.5 延时队列的使用

    队列这个知识相对比较冷门,因为平时的CURD基本用不到这个知识,今天用到了,所以就写个博客记录一下吧. 首先你得清楚要用什么驱动,除了database队列驱动(选择database驱动要php art ...

  8. spring+springmvc+mybatis构建系统

    今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,说到这里不得不说现在市面上一流大公司还有很多用这种架子,创业型公司大部分都用springboot集成的mvc+myba ...

  9. 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置

    本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...

  10. 用户体验很好的密码校验js

    <div class="form-group" data-reactid=".0.1.1.0.1.1.3.0.1.1"><label for= ...