unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
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 游戏服务器设计的更多相关文章
- H2Engine游戏服务器设计之属性管理器
游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...
- 游戏服务器设计之NPC系统
游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...
- h2engine游戏服务器设计之聊天室示例
游戏服务器设计之聊天室示例 简介 h2engine引擎建群以后,有热心网友向我反馈,想尝试h2engine但是没有服务器开发经验觉得无从入手,希望我能提供一个简单明了的示例.由于前一段时间工作实在忙碌 ...
- FPS游戏服务器设计的问题 【转】
一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...
- (转)FPS游戏服务器设计的问题
FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...
- 游戏服务器菜鸟之C#初探四游戏服务
经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...
- 开源服务器设计总计(plain framework2020年总计)
2020年注定会被历史铭记,世界遭受着一场前所未有的灾难,这种灾难到现在还在持续.还记得19年末的时候,那时候听到一点点消息,哪里想得到年关难过,灾难来的让人猝不及防.由于疫情防控,2020年感觉转瞬 ...
- Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计
前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...
- Scut游戏服务器引擎之Unity3d接入
Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets目录 ...
随机推荐
- 【Lintcode】074.First Bad Version
题目: The code base version is an integer start from 1 to n. One day, someone committed a bad version ...
- T(n) = 25T(n/5)+n^2的时间复杂度
对于T(n) = a*T(n/b)+c*n^k;T(1) = c 这样的递归关系,有这样的结论: if (a > b^k) T(n) = O(n^(logb(a)));logb(a)b为底a ...
- U盘安装CentOS的坑
坑一:U盘安装盘配置的路径错误 采用UltraISO制作的CentOS7的安装光盘,但是在实体机安装的时候,发生了一些奇怪的失败,比如 dracut-initqueue timeout等,后来在网上搜 ...
- 国标28181sip开源库介绍(陆续补充完备)
(1)osip一个基于 osip 库的 UAC 和 UAS 的代码整理http://blog.csdn.net/aflyeaglenku/article/details/51601270(2)pjsi ...
- saltstack syndic安装配置使用
salt-syndic是做神马的呢?如果大家知道zabbix proxy的话那就可以很容易理解了,syndic的意思为理事,其实如果叫salt-proxy的话那就更好理解了,它就是一层代理,如同zab ...
- cocos2dx 3.0 用ClippingNode做游戏的新手引导
转自:http://blog.csdn.net/star530/article/details/20851263 本篇介绍的是用ClippingNode 做游戏的新手引导,额,或者说是做新手引导的一种 ...
- Html.Partial 和 Html.RenderPartial 、Html.Action 和 Html.RenderAction区别
Html.Partial 和 Html.RenderPartial不需要为视图指定路径和文件扩展名.因为运行时定位部分视图与定位正常视力使用的逻辑相同.RenderPartial不是返回字符串,而是直 ...
- windows下搭建nginx服务器及实现nginx支持https配置流程
最近刚接触到了tomcat结合nginx做网站的负载均衡.之前对tomcat搭配nginx实现负载均衡也写过,在上一篇的博客中,最近遇到的问题是要在http的基础上支持https.也就是支持加密的请求 ...
- 下拉选择select和复选框checkbox的状态的各种方式
复选框的状态 <input name="ck" value=" " type="checkbox" checked> 或者&l ...
- 51Nod - 1092 回文字符串(添加删除字符LCS变形)
回文字符串 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca, ...