文档章节

微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

文刚的技术博客
 文刚的技术博客
发布于 2017/03/03 09:57
字数 2011
阅读 817
收藏 17

网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP

image

 

摘录网上的“.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点原则

  1. 成熟,有助于提高开发效率
  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 Network Unity自带 局域网

C# (Mono.NET)

 

 

 

有SmartFoxServer的实践经验,故雷同的商用服务器Photon我本次做了专门的实践.

Photon支持3种类型服务器

  • LoadBalancing: 负载均衡服务器
  • MMO: 大型MMO网游服务器
  • Lite: 大厅、房间类型服务器 (相对简单一些)

Photon授权策略:免费版100个CCU (对于绝大部分AR、VR项目足以了);  商用版3500美金不限制CCU (约2.5万人民币)。

image

 

云服务器选型

我的选型原则也就2点:

  1. 速度:国内访问速度快、快、快!
  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)

image

 

未来AR产品软件框架是这样的,服务器端需要搭建游戏逻辑Photon、以及资源更新AssetBundle–更新资源。MySQL目前是国内很多公司的标配–社区版免费。

 

image

Photon运行方式很简单,选择服务器实例,启动应用即可,符合GUI操作习惯。

 

image

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#链接类快捷方式:节约成本的王道

image

即,直接可以实现前段和后端复用模型实体代码、传递的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),而且开源。 image

  • 使用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里面开通:网络接口–网络安全组–入站安全规则、出站安全规则。

 

 

PhotonLab 源码:https://git.oschina.net/xifarm/PhotonLab

 

参考

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

© 著作权归作者所有

共有 人打赏支持
文刚的技术博客
粉丝 94
博文 19
码字总数 23458
作品 0
西安
技术主管
私信 提问
加载中

评论(9)

文刚的技术博客
文刚的技术博客
OSC上还是JAVA的人才居多啊。

评论我就不一一回复了,呵呵。
kakai
kakai
只能说你鬼话连篇,大公司都希望核心技术完全掌握在自己手中,很少有大公司的大项目会选择第三方服务器套件,选择第三方过于被动,核心bug就算能及时发现也不一定能及时修复,可伸缩性和核心代码修改完全依赖第三方企业,谁会把自己的命脉交由第三方企业?小公司用用photon还行,大公司绝壁不会用
kakai
kakai
创业失败尽然怪责程序语言选型?这我也是醉了,这是你项目本身的问题,项目成功了还害怕语言带来的开发成本?干C++服务器代码编写的早早就得跳楼去了。
A
Angular4

引用来自“javaflex”的评论

不说其它,只是说在服务器方面,NET比java还是太嫩了!不喜勿喷!
那倒是请大神说说看嫩在哪些方面???安全性还是效率??有没有确实令人信服的测试或实验结果??
javasql
javasql
不说其它,只是说在服务器方面,NET比java还是太嫩了!不喜勿喷!
呆出水平
呆出水平
文章这么长都不写个总结最后都不知道你说什么
A
Angular4
很看好开源后的.Net,经测试,.NetCore在Linux下的效率非常不错!看来微软是要下决心做跨平台了!!
无聊的人啊
无聊的人啊
居然抛弃我大java不想活了
aijt1314
aijt1314
6666
Photon 也许能成为你最喜爱的容器操作系统

Phonton OS 专注于容器,是一个非常出色的平台。 —— Jack Wallen 容器在当下的火热,并不是没有原因的。正如之前讨论的,容器可以使您轻松快捷地将新的服务与应用部署到您的网络上,而且并...

作者: Jack Wallen
2017/12/04
0
0
微软 Azure Q4 营收成长一倍,分析师:比其他家有更多预建模型可选

【Technews科技新报】近年来随着人工智能(AI)发展火热,云端业务也成了科技大厂的兵家必争之地,而从美国投资银行 KeyBanc 近日公布的研究报告来看,虽然亚马逊 AWS 仍旧占有应用的最大比例...

Nana Ho
2018/01/15
0
0
如何使用 OneAPM 监控微软 Azure Cloud Service ?

不知不觉微软 Azure 已经进入中国市场近两年的时间。那么 Azure 平台的性能究竟如何?资源加载的延迟、虚拟机的稳定性等问题是否切实满足客户期许。这些都是大家对微软 Azure 这个国外的云服...

OneAPM蓝海讯通
2015/08/20
43
0
在公有云平台体验开源方案的自动部署

微软和开源?真的?微软的开源之旅起源于10多年前,同时微软“云为先”的策略更进一步地推动了微软对于开源软件的采纳和支持的步伐,从而让微软的云计算平台Azure成为一个开放且灵活的云计算...

KylieLiang
2016/08/12
238
5
比亚马逊更积极,微软发布开源工具连接Kubernetes与Azure

与亚马逊对Kubernetes暧昧态度不同,微软对开源项目Kubernetes的支持力度一直很大,近日更是开源Virtual Kubelet工具来方便开发者将Kubernetes系统接入微软Azure云平台。 Kubernetes是谷歌开...

CashCat
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python中判断字符串是否包含中文

Python import reRE = re.compile(u'[\u4e00-\u9fa5]', re.UNICODE)match = re.search(RE, str)if match is None:# 没有包含中文字符 参考 Python regular expressions return true/f......

亚林瓜子
24分钟前
0
0
《CNCF × Alibaba 云原生技术公开课》正式首播

《CNCF × Alibaba 云原生技术公开课》立即观看:点击立即观看 云原生最初来描述云上应用的典型架构与特性,随着容器、Kubernetes、Serverless、FaaS技术的演进,CNCF(云原生计算基金会)把...

mcy0425
25分钟前
2
0
网站漏洞如何修复网站程序问题

jeecms 最近被爆出高危网站漏洞,可以导致网站被上传webshell木马文件,受影响的版本是jeecms V6.0版本到jeecmsV7.0版本。该网站系统采用的是JAVA语言开发,数据库使用的是oracle,mysql,sql数...

网站安全
28分钟前
2
0
git 中“warning: CRLF will be replaced by LF in”解决方案

https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important...

qwfys
32分钟前
1
0
Spring Boot配置ssl证书启用HTTPS协议

一 、点睛 SSL是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议和各种应用层协议之间,为数据通信提供安全支持。 SSL协议分为两...

故久呵呵
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部