網(wǎng)上火熱的“微軟.NET年芳15”文章,我也得寫點什么嘛,畢竟我還是現(xiàn)任的微軟MVP。

 

 

摘錄網(wǎng)上的“.NET 15周年”信息如下:

微軟的 .NET 框架本周迎來了 15 歲生日。.NET 的第一個版本在 2002 年 2 月 13 日作為的 Visual Studio.NET 的一部分首次公開亮相。過去 15 年,.NET 框架從一個流行的閉源軟件開發(fā)平臺,變成了一個開源的跨平臺開發(fā)工具,微軟是在 2014 年 11 月 12 日宣布開源 .NET,支持競爭對手 Linux 和 OS X 的平臺。微軟稱,Visual Studio 2017 將于 2017 年 3 月 7 日發(fā)布,而 Visual Studio 也迎來了 20 歲生日,開源的 .NET Core 也將發(fā)布 2.0版本。

 

      我梳理了一下目前的.NET技術(shù)棧: 業(yè)務(wù)是基于Unity3D(跨平臺游戲開發(fā)引擎),開發(fā)AR、VR 應(yīng)用; 絕大部分項目采用單機版,使用的編程語言是C#(Mono.NET),不過最近交流的AR幾個業(yè)務(wù),明顯用戶已經(jīng)不太滿足單機版,有更多的需求需要用到聯(lián)網(wǎng)的服務(wù)器功能,故技術(shù)選型就勢在必行了:也算是未雨綢繆吧。

 

技術(shù)棧選型

我的技術(shù)選型有2點原則

  1. 成熟,有助于提高開發(fā)效率

  2. 人多,有坑大家一起填

這2點原則是基于第一次創(chuàng)業(yè)失敗的經(jīng)驗總結(jié)。約在3年前吧,剛開始創(chuàng)業(yè)的時候,特別排斥C#.NET技術(shù)(互聯(lián)網(wǎng)創(chuàng)業(yè),還用C#,說出去都不好意思啊),雖然用的是Unity3D游戲引擎(C#),但是服務(wù)器選擇卻是非.NET傾向的。 那個時候?qū)Ρ攘硕喾N技術(shù)棧:

  • PHP游戲服務(wù)器

  • Node.js游戲服務(wù)器

  • C++游戲服務(wù)器

  • JAVA游戲服務(wù)器

權(quán)衡再三選擇是Java,采用的是SmartFoxServer商用服務(wù)器框架,JAVA和C#非常類似、學(xué)習(xí)成本低一些。

種種原因,后來呢,第一次創(chuàng)業(yè)失敗了,我的反思是“創(chuàng)業(yè)成功大部分原因是CEO的引導(dǎo)有方,創(chuàng)業(yè)失敗大部分原因是CTO的選擇失誤導(dǎo)致”。

當(dāng)時我沒有考慮到成本意識、對一個5人研發(fā)團隊,C#、Java并行的溝通風(fēng)險有多大:

如果當(dāng)時客戶端是C#技術(shù)棧、服務(wù)器端也是C#技術(shù)棧,則可以從5人技術(shù)團隊裁掉1人,節(jié)約20%人力成本,而且減少溝通后可以提高30%的開發(fā)效率,進而有效的推動產(chǎn)品快速撲向市場的速度,可惜這個是“事后諸葛亮”。

這個“事后諸葛亮”,我一直如噎在喉.

       不過去年在一次微軟技術(shù)峰會,看到網(wǎng)易案例的演講,我的眼睛亮了起來:“微軟技術(shù)大神徐玉濤Tory做的分享—網(wǎng)易《絕代雙驕》將游戲后端從Java轉(zhuǎn)為新一代.NET Core,研發(fā)效率提升20%,服務(wù)器成本節(jié)省50%”–在線視頻為證。

 

故對選擇一款C#的服務(wù)器,以打通AR、VR客戶端、服務(wù)器端,提高開發(fā)效率,生產(chǎn)力加速,我個人非常期待

Photon

商用

成熟

C# (Mono.NET)

ASP.NET Core

開源

 2.0還未發(fā)布

.NET Core

Unity NetworkUnity自帶局域網(wǎng)

C# (Mono.NET)

 

 

 

有SmartFoxServer的實踐經(jīng)驗,故雷同的商用服務(wù)器Photon我本次做了專門的實踐.

Photon支持3種類型服務(wù)器

  • LoadBalancing: 負載均衡服務(wù)器

  • MMO: 大型MMO網(wǎng)游服務(wù)器

  • Lite: 大廳、房間類型服務(wù)器 (相對簡單一些)

Photon授權(quán)策略:免費版100個CCU (對于絕大部分AR、VR項目足以了);  商用版3500美金不限制CCU (約2.5萬人民幣)。

 

 

云服務(wù)器選型

我的選型原則也就2點:

  1. 速度:國內(nèi)訪問速度快、快、快!

  2. 便宜:方便我們這種初創(chuàng)型公司節(jié)約不必要的成本

雖然同樣是世紀互聯(lián)在運營,但是早期的AZure在我心目中,網(wǎng)速那是非常非常的慢、價格也是高高在上(和國內(nèi)的阿里、百度等云比起來,毫無優(yōu)勢可言),故原來使用過阿里云、七牛云,國際版高大上的AZure和AWS都未曾考慮過。

但是呢,微軟MVP內(nèi)部微信群、郵件組,AZure的討論還是很多的,尤其是“自2017年2月1日起,Azure虛擬機價格大幅下調(diào),最高降價幅度高達60%!”這則消息討論了好幾天,我也漸漸回頭持續(xù)關(guān)注AZure。

通過信息搜集,我了解的AZure信息碎片如下:

Windows Azure在北京、上海部署有服務(wù)器

中國的AZure是個”國內(nèi)版本”–和國際版AZure采用物理隔離方案

MySQL也是比較符合目前國內(nèi)接地氣的方案;

AZure新的特效,國際版和國內(nèi)版部署時間約差不多是3個月至半年。

https://www.azure.cn/  是國內(nèi)版本的網(wǎng)站

 

在Azure上搭建Photon服務(wù)器(C#.NET)

 

 

未來AR產(chǎn)品軟件框架是這樣的,服務(wù)器端需要搭建游戲邏輯Photon、以及資源更新AssetBundle–更新資源。MySQL目前是國內(nèi)很多公司的標(biāo)配–社區(qū)版免費。

 

 

Photon運行方式很簡單,選擇服務(wù)器實例,啟動應(yīng)用即可,符合GUI操作習(xí)慣。

 

 

AZure虛擬機,提供了C盤,直接把需要的軟件和數(shù)據(jù),通過遠程桌面拷貝過去即可,windows Server 2012英文系統(tǒng),還是挺方便的。

 

幾個有用的小技巧:

  • TT模板:database first–自動生成模型代碼

原創(chuàng)文章來源: 使用T4模板生成MySql數(shù)據(jù)庫實體類

注意在VS2015下,需要把.ttinclude后綴修改為.tt才可以。 同時,需要修改 數(shù)據(jù)庫連接為你自己的 9 var connectionString = @"server=127.0.0.1;uid=root;pwd=12345678;charset=utf8;";

AZure開5505 UDP端口

  • 前端、后端C#鏈接類快捷方式:節(jié)約成本的王道

 

即,直接可以實現(xiàn)前段和后端復(fù)用模型實體代碼、傳遞的Code枚舉代碼,以減少文檔重復(fù)工作量。

以關(guān)鍵的OperationCode為例,如果前端是C#、后端是Java,則無法做到代碼級別復(fù)用,即需要寫文檔來約束。而相同的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網(wǎng)站就用它來做ORM),而且開源。

    • 參考:

dapper操作連接mysql開發(fā)最完整實例總結(jié)

  • 使用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已結(jié)自帶了Json序列化API,但是有bug,Json序列化可能為空,就選擇了”老朋友”newtonSoft.dll了。

  • AZure開通端口

    應(yīng)用跑起來后,端口一直不通,需要AZure開通端口–首先在Windows Server里面開通端口(TCP\UDP),然后再AZure里面開通:網(wǎng)絡(luò)接口–網(wǎng)絡(luò)安全組–入站安全規(guī)則、出站安全規(guī)則。

 

APK Demo下載:

    •  

https://www.pgyer.com/

  • 搭建Photon服務(wù)器(C#.NET)

 

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

 

參考

  1. 時間飛快–連微軟官方都開源了208個源碼庫

  2. 歲月在挑燈夜戰(zhàn)中走過:親歷的軟件框架 》

  3. 我的微軟.net演進路線圖

  4. 榮獲2015微軟.NET MVP稱號!

  5. 寫在.NET 15周年之際——致那些仍然愛著.NET的中國程序員們 來自微軟MVP Tony Qu微信

  6. .NET 十五歲,談?wù)勎已壑械?NET 來自微軟MVP  張善友的博客》

http://www.cnblogs.com/xifarm/p/photononazure.html