微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)
网上火热的“微软.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客户端、服务器端,提高开发效率,生产力加速,我个人非常期待。
商用 |
成熟 |
C# (Mono.NET) |
|
开源 |
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万人民币)。
云服务器选型
我的选型原则也就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),而且开源。
- 参考:
- 使用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下载:
- 搭建Photon服务器(C#.NET)
PhotonLab 源码:https://git.oschina.net/xifarm/PhotonLab
参考
- 时间飞快–连微软官方都开源了208个源码库
- 《岁月在挑灯夜战中走过:亲历的软件框架 》
- 《我的微软.net演进路线图》
- 《荣获2015微软.NET MVP称号!》
- 《写在.NET 15周年之际——致那些仍然爱着.NET的中国程序员们 来自微软MVP Tony Qu微信》
- 《.NET 十五岁,谈谈我眼中的.NET 来自微软MVP 张善友的博客》
微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)的更多相关文章
- 在Azure上搭建L2TP服务器
L2TP是常用的一种point-site的VPN.而目前在Azure上的VPN Gateway只支持IPsec和SSTP两种.如果客户需要L2TP服务器,需要自己在VM中搭建.本文将介绍如何在Azur ...
- [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器
[Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器 Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是 ...
- [Azure] 使用 Azure 快速搭建 Redis 服务器
Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是基于Redis的,而新浪对Redis的使用也非常深,据说是一组64G内存的Redis集群.前段时间我 ...
- 在Windows Azure上搭建SSTP VPN
在国内,VPN是用来干嘛的大家都懂的.很久之前我尝试用Azure的Virtual Network搞VPN结果惨败了.最近微博上有基友写了篇文章亲测可行,原文在这里.可惜是英文的.所以我的这篇文章仅仅是 ...
- 15分钟在笔记本上搭建 Kubernetes + Istio开发环境
11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...
- Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群
ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...
- Windows Azure上搭建SSTP VPN
一.服务器设置 首先,从0开始,你需要创建一个新的VM.我选择Windows Server 2012 R2,所有步骤和创建普通VM都一样,但最后在防火墙设置里一定要打开TCP 443端口: 创建完成后 ...
- 在Azure上搭建Orchard CRM入口网站
这是英文版:Setup Orchard CRM portal website on Azure
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(一)
(一)前言 本文主要介绍了实践部署AzurePack的Website Cloud的过程.在部署之前, 首先要对AzurePack有个基本的了解. Azure Pack是微软的私有云方案,具有弹性. ...
随机推荐
- Web开发者的最爱 5个超实用的HTML5 API
摘要:毫无疑问,HTML5已经成为当今最流行的一门技术,尤其是Web开发者们对HTML5的兴趣是日趋渐浓.HTML5的许多功能也都能在现代浏览器中得以实现.然而,作为开发者,除了关注HTML5的功能和 ...
- Intellij idea 15配置tomcat,maven
刚导了个项目进去,想把项目运行起开,怎么也找不到tomcat... ctrl + alt +s,打开设置窗,搜索 Application Server Tomcat: 点中间绿色的“+”号,添加选择t ...
- 选项卡(TabHost)的功能与用法
TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个便签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆法区域.通过这种方式,就可以在一个容器里放置更多组件,例如手机 ...
- 批量转换引擎为innodb
[root@HE1 ~]# catconvert_Storage_Engine.sh #/bin/bash #FileName:Convert_Storage_Engine.sh #Desc:Conv ...
- No curses/termcap library found
CentOS6.5中编译Mysql时遇见如下错误 error: No curses/termcap library found checking for tgetent in -lncurses... ...
- JSON数据格式中的引号
JSON数据中必须使用双引号: $.getJSON,的输入必须是正确的JSON数据,否则不会执行回调函数: $.parseJSON的输入必须是正确的JSON数据,否则会有异常:
- VoiceEngine获取硬件信息
#include "webrtc\voice_engine\include\voe_base.h" #include "webrtc\voice_engine\inclu ...
- DailyTick 开发实录 —— UI 设计
上次的文章中描述了 DailyTick 的设计理念.经过两周左右的设计和开发,现在 DailyTick 的主要 UI 已经完成了原型的设计和初步的实现.既然是原型,当然看起来就有点粗糙. 主 UI 主 ...
- CodeForces757B
B. Bash's Big Day time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- 机器学习实战笔记(1)——k-近邻算法
机器学习实战笔记(1) 1. 写在前面 近来感觉机器学习,深度学习神马的是越来越火了,从AlphaGo到Master,所谓的人工智能越来越NB,而我又是一个热爱新潮事物的人,于是也来凑个热闹学习学习. ...