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

    之后的规划:

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

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

  • 相关阅读:
    test
    【转载】ASP.NET MVC 3 —— Model远程验证
    【转载】富有客户端技术之——jQuery EasyUI
    【转载】基于ASP.NET Web Application的插件实现,附DEMO
    【转载】浅谈C#中的延迟加载(1)——善用委托
    【转载】Winform开发框架之权限管理系统
    【转载】基于我的Winform开发框架扩展而成的WCF开发框架
    [转载]10大优秀的移动Web应用程序开发框架推荐
    [转载]C#泛型列表List<T>基本用法总结
    [转载]推荐一个被大家忽视的微软的反跨站脚本库AntiXSS V3.1
  • 原文地址:https://www.cnblogs.com/htoooth/p/6937818.html
Copyright © 2020-2023  润新知