博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
阅读量:4364 次
发布时间:2019-06-07

本文共 1446 字,大约阅读时间需要 4 分钟。

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 做为构建项面的核心来做。

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

501306-20170924175035931-1130547510.jpg

非常简单。

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

之后的规划:

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

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

转载于:https://www.cnblogs.com/htoooth/p/6937818.html

你可能感兴趣的文章
Django连接MySQL数据库
查看>>
漫游Kafka入门篇之简单介绍(1)
查看>>
redis学习之旅-初识Redis
查看>>
WinForm 小程序 NotePad
查看>>
JSTL 核心标签库 使用
查看>>
线程池ThreadPool
查看>>
hibernate入门实例
查看>>
WPF路由事件二:路由事件的三种策略(转)
查看>>
Java中的内存泄露
查看>>
asp.net 自定义控件验证FCKeditor是否为空
查看>>
oracle 查看表空间的脚本
查看>>
Python 描述符是什么?以及如何实现
查看>>
程序员的激情其实是一种痛苦
查看>>
MySQL后台线程的清理工作
查看>>
连接mysql数据库,创建用户模型
查看>>
cogs1885 [WC2006]水管局长数据加强版
查看>>
paramiko模块
查看>>
[原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]
查看>>
1083 是否存在相等的差
查看>>
Redis总结(四)Redis 的持久化(转载)
查看>>