设为首页 收藏本站
查看: 658|回复: 0

[经验分享] 微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

[复制链接]

尚未签到

发表于 2017-6-30 06:02:41 | 显示全部楼层 |阅读模式
网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP。

  摘录网上的“.NET 15周年”信息如下:
  微软的 .NET 框架本周迎来了 15 岁生日。.NET 的第一个版本在 2002 年 2 月 13 日作为的 Visual Studio.NET 的一部分首次公开亮相。过去 15 年,.NET 框架从一个流行的闭源软件开发平台,变成了一个开源的跨平台开发工具,微软是在 2014 年 11 月 12 日宣布开源 .NET,支持竞争对手 Linux 和 OS X 的平台。微软称,Visual Studio 2017 将于 2017 年 3 月 7 日发布,而 Visual Studio 也迎来了 20 岁生日,开源的 .NET Core 也将发布 2.0版本。
  我梳理了一下目前的.NET技术栈: 业务是基于Unity3D(跨平台游戏开发引擎),开发AR、VR 应用; 绝大部分项目采用单机版,使用的编程语言是C#(Mono.NET),不过最近交流的AR几个业务,明显用户已经不太满足单机版,有更多的需求需要用到联网的服务器功能,故技术选型就势在必行了:也算是未雨绸缪吧。

技术栈选型
  我的技术选型有2点原则

  • 成熟,有助于提高开发效率
  • 人多,有坑大家一起填
  这2点原则是基于第一次创业失败的经验总结。约在3年前吧,刚开始创业的时候,特别排斥C#.NET技术(互联网创业,还用C#,说出去都不好意思啊),虽然用的是Unity3D游戏引擎(C#),但是服务器选择却是非.NET倾向的。 那个时候对比了多种技术栈:

  • PHP游戏服务器
  • Node.js游戏服务器
  • C++游戏服务器
  • JAVA游戏服务器
  权衡再三选择是Java,采用的是SmartFoxServer商用服务器框架,JAVA和C#非常类似、学习成本低一些。
  种种原因,后来呢,第一次创业失败了,我的反思是“创业成功大部分原因是CEO的引导有方,创业失败大部分原因是CTO的选择失误导致”。
  当时我没有考虑到成本意识、对一个5人研发团队,C#、Java并行的沟通风险有多大:
  如果当时客户端是C#技术栈、服务器端也是C#技术栈,则可以从5人技术团队裁掉1人,节约20%人力成本,而且减少沟通后可以提高30%的开发效率,进而有效的推动产品快速扑向市场的速度,可惜这个是“事后诸葛亮”。
  这个“事后诸葛亮”,我一直如噎在喉.
  不过去年在一次微软技术峰会,看到网易案例的演讲,我的眼睛亮了起来:“微软技术大神徐玉涛Tory做的分享—网易《绝代双骄》将游戏后端从Java转为新一代.NET Core,研发效率提升20%,服务器成本节省50%”–在线视频为证。
  故对选择一款C#的服务器,以打通AR、VR客户端、服务器端,提高开发效率,生产力加速,我个人非常期待




  Photon
  商用
  成熟
C# (Mono.NET)
  ASP.NET Core
  开源
   2.0还未发布
.NET Core
Unity NetworkUnity自带局域网C# (Mono.NET)
  有SmartFoxServer的实践经验,故雷同的商用服务器Photon我本次做了专门的实践.
  Photon支持3种类型服务器

  • LoadBalancing: 负载均衡服务器
  • MMO: 大型MMO网游服务器
  • Lite: 大厅、房间类型服务器 (相对简单一些)
  Photon授权策略:免费版100个CCU (对于绝大部分AR、VR项目足以了);  商用版3500美金不限制CCU (约2.5万人民币)。
云服务器选型
  我的选型原则也就2点:

  • 速度:国内访问速度快、快、快!
  • 便宜:方便我们这种初创型公司节约不必要的成本
  虽然同样是世纪互联在运营,但是早期的AZure在我心目中,网速那是非常非常的慢、价格也是高高在上(和国内的阿里、百度等云比起来,毫无优势可言),故原来使用过阿里云、七牛云,国际版高大上的AZure和AWS都未曾考虑过。
  但是呢,微软MVP内部微信群、邮件组,AZure的讨论还是很多的,尤其是“自2017年2月1日起,Azure虚拟机价格大幅下调,最高降价幅度高达60%!”这则消息讨论了好几天,我也渐渐回头持续关注AZure。
  通过信息搜集,我了解的AZure信息碎片如下:
  Windows Azure在北京、上海部署有服务器
  中国的AZure是个”国内版本”–和国际版AZure采用物理隔离方案
  MySQL也是比较符合目前国内接地气的方案;
  AZure新的特效,国际版和国内版部署时间约差不多是3个月至半年。
  https://www.azure.cn/  是国内版本的网站
在Azure上搭建Photon服务器(C#.NET)
  未来AR产品软件框架是这样的,服务器端需要搭建游戏逻辑Photon、以及资源更新AssetBundle–更新资源。MySQL目前是国内很多公司的标配–社区版免费。
  Photon运行方式很简单,选择服务器实例,启动应用即可,符合GUI操作习惯。
  AZure虚拟机,提供了C盘,直接把需要的软件和数据,通过远程桌面拷贝过去即可,windows Server 2012英文系统,还是挺方便的。
几个有用的小技巧:

  • TT模板:database first–自动生成模型代码
  原创文章来源: 使用T4模板生成MySql数据库实体类
  注意在VS2015下,需要把.ttinclude后缀修改为.tt才可以。 同时,需要修改 数据库连接为你自己的 9 var connectionString = @"server=127.0.0.1;uid=root;pwd=12345678;charset=utf8;";
  AZure开5505 UDP端口

  • 前端、后端C#链接类快捷方式:节约成本的王道
  即,直接可以实现前段和后端复用模型实体代码、传递的Code枚举代码,以减少文档重复工作量。
  以关键的OperationCode为例,如果前端是C#、后端是Java,则无法做到代码级别复用,即需要写文档来约束。而相同的C#代码后,注释好.cs文件,前端和后端是同样的代码,则沟通起来畅快了很多。
  public enum MyOperationCodes : byte     {         /// <summary>
        /// LoginOperation          /// </summary>           LoginOperation = 100,
  /// <summary>          /// EchoOperation          ///  </summary>          EchoOperation = 101,
  /// <summary>          /// GameOperation          ///  </summary>          GameOperation = 102,
  /// <summary>          /// ChatOperation          ///  </summary>          ChatOperation = 103,
  /// <summary>          /// ChatOperation          ///  </summary>          CCUOperation = 104,      }


  • MySQL ORM (Dapper框架):
      我选择了轻量级、火热的Dapper(stackoverflow网站就用它来做ORM),而且开源。  


      参考:

  dapper操作连接mysql开发最完整实例总结
    使用SQL部分代码如下:
  Db aa = DbInit();
  var a3 = aa.Query<device>("select * from device where  uuid=@uuid", new { uuid = "aabb636238694579824398" });
  device dv = new device  {       UUID = "aabb" +  DateTime.Now.Ticks.ToString(),       DeviceModel = "IOS",       DeviceName  = "Iphone 5s",       RegisterDate = DateTime.Now.AddDays(-1),        UpdateDate = DateTime.Now,       TokenID = DateTime.Now.Ticks.ToString()
};  long ret = aa.Devices.InsertOrUpdate(dv);
  var a1 = aa.Devices.All();


  • Json序列化工具:newtonsoft
  本来Unity5.3已结自带了Json序列化API,但是有bug,Json序列化可能为空,就选择了”老朋友”newtonSoft.dll了。

  • AZure开通端口
      应用跑起来后,端口一直不通,需要AZure开通端口–首先在Windows Server里面开通端口(TCP\UDP),然后再AZure里面开通:网络接口–网络安全组–入站安全规则、出站安全规则。
  APK Demo下载:



  https://www.pgyer.com/
      搭建Photon服务器(C#.NET)
PhotonLab 源码:https://git.oschina.net/xifarm/PhotonLab
参考

  • 时间飞快–连微软官方都开源了208个源码库
  • 《岁月在挑灯夜战中走过:亲历的软件框架  》
  • 《我的微软.net演进路线图》
  • 《荣获2015微软.NET MVP称号!》
  • 《写在.NET 15周年之际——致那些仍然爱着.NET的中国程序员们 来自微软MVP  Tony Qu微信
  • 《.NET 十五岁,谈谈我眼中的.NET 来自微软MVP  张善友的博客》

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389500-1-1.html 上篇帖子: VS 远程调试 Azure Web App 下篇帖子: 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表