unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计

最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android。团队由于缺少游戏网络层的设计经验,于是就采用市面上比效常用的服务器 photon 来做。

具体到语言:unity3d 使用 c# , android 使用 java,使用 photon 使用 c# 。

做技术选型的时候,想了很久,想统一技术的基础,也就是说服务器端也采用 c#, 尝试 c# 写了几个小 demo,觉得自己还是缺少必要的技能,于是还是选择了熟悉的工具 node.js。

由于 photon 是 c# 为主要核心的,所以还要选择 photon 与 node.js 的网络层协议,在网上找了一圈,发现 grpc 不错,然后写了一个 demo 互相能调通,就决定以 node.js + grpc 做为构建项面的核心来做。

规划一下项目的整体结构如下图所示:

非常简单。

pikachu-net,就是以 photon 为核心的游戏服务器,它管理所有的 unity3d 客户端的连接,长连接的形式,是有状态的。会把所有的业务相关的请求转发到 pikachu-node,如登录,注册等。

pikachu-node, 主要是业务处理逻辑,能游戏的登录等。pikachu-net 与 pikachu-node 之间用 grpc 进行连接。pikachu-node 做成了没有状态服务,所以可以部署成集群的形式。

下面详细说说 pikachu-node 的实现:

由于游戏跟地理位置有关,所以使用了 postgis/postgresql,node.js 下面就使用 knex.js 做为连接工具。

市面上也没有对 grpc 的多个服务的集成使用经验,所以参考 express 的中间件设计理念,自己设计一个 node.js 的 grpc 框架用来组织代码的结构。

在node.js 中 grpc 没有使用 静态编绎模式,而是直接把 proto 文件进行载入的形式进行处理。

代码管理使用 oschina git 的私库。服务器使用 阿里云,系统是 windows 的,没有办法 photon 只能布在 windows 上。

部署代码开始一段时间,是使用 ftp 进行拷贝,发现太难受了。于是用 oschina git 的 webhook 和 express 写了一个发布服务,当我的代码推到 git 上时,就自动更新代码,重启服务,事实证明,这项工作太明智了,省了很多的时间。

node.js 的代码服务都是使用 pm2 进行管理的。

之后日志的查看也是一个问题,因为windows 上没有 ssh,只能用远程登录来查看,当前win只有一个用户,所以不能两个人同时在线,新的会把旧的踢下线,这是多烦,每次查看日志只能叫我来看,于是用 express + socket.io 开发了一个简单的网页版的日志查看页面。这下世界都安静了。

pikachu-net,每次都是在本地编绎好,然后上传到服务器,后来我也把这个加入到发布服务,之后就能推上代码直接重启服务。

之后的规划:

数据库管理要做起来,因为目前数据库字段都是手工建立,如果要布一个测试环境,就很难受。

没有文档,这个文篇就算一篇文档吧。

unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 游戏服务器菜鸟之C#初探四游戏服务

    经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...

  7. 开源服务器设计总计(plain framework2020年总计)

    2020年注定会被历史铭记,世界遭受着一场前所未有的灾难,这种灾难到现在还在持续.还记得19年末的时候,那时候听到一点点消息,哪里想得到年关难过,灾难来的让人猝不及防.由于疫情防控,2020年感觉转瞬 ...

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

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

  9. Scut游戏服务器引擎之Unity3d接入

    Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets目录 ...

随机推荐

  1. ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)

    Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...

  2. ACM学习历程——HDU5202 Rikka with string(dfs,回文字符串)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  3. hdu 5730 Shell Necklace —— 分治FFT

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5730 DP式:\( f[i] = \sum\limits_{j=1}^{i} f[i-j] * a[j] ...

  4. mysql create table

  5. nodejs链接mysql

    使用mysql连接池:1.安装mysql支持npm install mysql 2.安装node.js的mysqlpool模块npm install -g node-mysql //-g表全局 3.直 ...

  6. Spring如何引用properties文件里的…

    [zt]Spring如何引用properties文件里的配置 来自 http://blog.csdn.net/luobo525/archive/2006/11/06/1370258.aspx 1.Pr ...

  7. Fluuter常遇到的问题

    The ADB binary found at XX is obsolete and has seriousperformance problems with the Android Emulator ...

  8. HDU - 1078 FatMouse and Cheese(记忆化+dfs)

    FatMouse and Cheese FatMouse has stored some cheese in a city. The city can be considered as a squar ...

  9. C++开源库(一) ----libConfig详解

    博主天生患有蛋疼疾病,写博不易,转载注明出处http://www.cnblogs.com/liboBlog/,谢谢! 在写程序的时候必不可少的一个部分就是conf文件的解析,但是如果自己解析的话会比较 ...

  10. 小议IT公司的组织架构

    IT公司的组织结构还是很相似的,常见的部门也不多.我简单地总结了下,分享给各位.每个公司都有自己独特的组织架构,本文仅供参考.很多部门和职位的职责和权力,我也不甚了解.简单地写写,有兴趣的同学可以补充 ...