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
关于 C sharp
H2engine 的 c# 版本正在紧锣密鼓的开发中, 大家拭目以待.
相关连接
文档 http://h2cloud.org/
源码 https://github.com/fanchy/h2engine
来源: https://www.cnblogs.com/zhiranok/p/h2enginewin.html