GitHub原地址:为什么使用C# .net core做服务端?

黑体字为作者(熊猫大佬)原创,红色为个人理解

游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高。开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者C++ + LUA 到现在 很多公司开始使用erlang,go,java,c#。目前是一个百花齐放的局面。

但是如果是要你重新做一个网游server,不考虑对公司或者已有的东西兼容性,你会怎么选择?我仔细想了一下这个问题,大概有这个几个方面需要考虑:

1. 语言的稳定性(致命性)

游戏服务器的特点是高负载低延时。所以一般服务端进程都是带状态的,一旦挂掉就意味着数据丢失,这点是无法容忍的。

2. 运行时热更(致命性)

游戏服务器逻辑极其复杂,很容易出现bug,但是又不能经常停服,所以热更修复bug就显得十分必要。出现错误开发人员可以立即编写代码,然后热更修复,线上用户完全感觉不到。

3. 是否有协程支持(重要性5星)

分布式服务器架构,进程与进程之间必然会有大量交互。由于游戏逻辑很难拆分成多线程,所以一般来说都是逻辑单线程。如果没有协程支持,必然产生大量回调,代码维护会变得非常困难。

4. 编译速度(重要性5星)

使用c++开发,30%的时间都浪费在编译上。假如编译很快或者不需要编译,必定大大提高开发效率。

5. 跨平台(4星)

一般游戏服务器都架设在linux上面。但是平常开发,使用windows会更加方便,如果跨平台,开发以及测试效率会大大提升,并且不需要单独搞一个开发机,本机电脑就可以满足平常开发

6. 可阅读性,可重构性(3星)

代码可以重构能大大减轻写代码的难度

7. 库是否齐全,生态是否完善(3星)

库齐全,生态好,自己需要造的轮子就少

8.跟客户端统一语言(3星)

客户端服务端共用语言,优势十分明显,很多代码可以复用,逻辑程序员不再需要区分前后端,双端都可以写,一个人即可完成一个功能,大大减少了沟通的时间成本。

9. IDE的支持(3星)

代码提示,重构等支持,优秀的IDE能提高几倍的开发效率。

10. 语言的性能(1星)

目前服务器性能都不是太大问题,不过性能好总比性能差要强。

语言 C# C/C++ Java Go Lua Python Erlang
稳定性 稳定 容易挂 稳定 稳定 稳定 稳定 稳定
运行时热更 支持 较难支持 支持 不支持 支持 支持 支持
跨平台 支持 较难支持 支持 支持 较难支持 支持 支持
协程 需要自己实现 支持不好 支持 支持 支持 支持
编译速度 不需要编译 不需要编译 不需要编译
阅读性重构性 一般 一般
游戏库跟生态 一般 一般 一般
客户端统一语言 Unity Unity、UE4 暂无 暂无 Unity、UE4 UE4 暂无
IDE的支持 普通
语言的性能 极好 很差

从表格可以看出:

  1. C/C++稳定性差,编译速度慢,存在致命缺陷
  2. Go不支持热更,由于不支持泛型,重构性较差,无法跟客户端共享代码,存在致命缺陷
  3. Java协程支持差,无法跟客户端共享代码
  4. Lua库少,性能差,代码可阅读性可重构性差,跨平台完全依赖C/C++,处理起来麻烦,ide支持差
  5. Python 性能很差,代码可阅读性可重构性差,无法跟客户端共享代码,ide支持差
  6. Erlang 性能差,函数式风格不好上手,ide支持差
  7. C# .net core各个方便都非常优秀,不过跟UE4无法共享代码

当前Unity是最火的游戏引擎,C#服务端搭配Unity完全是天作之合,基本上找不到缺陷。

ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)相关推荐

  1. 我问你这篇保熟不?! -- 做服务端开发,不懂网络层,真的可以吗?

    文章目录 唠嗑两句·网络层 网络层简介 网际协议IP 常见的三类IP地址 A类 B类.C类 IP地址与硬件地址 地址解析协议ARP IP层转发分组 子网划分 子网划分的背景意义 什么是子网划分? 子网 ...

  2. (SVN笔记)https内网IP端口配置SVN服务端+内网SVN客户端联合使用

    目录 1.前言 2.SVN服务端设置 3.开始使用SVN (1)新建版本库 (2)迁入项目到SVN服务端 (3)检索项目/拉取项目check out (4)提交代码commit (5)更新代码upda ...

  3. webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)...

    服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...

  4. 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复

    立即学习:https://edu.csdn.net/course/play/24458/296236?utm_source=blogtoedu 1.修复端口被占用的bug import socketp ...

  5. AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)

    1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...

  6. 物联网学习篇:Python SDK接入阿里云物联网平台,接收服务端订阅消息

    1. 下载SDK SDK下载链接 下载之后,可见得到了一个 qpid-proton-0.29.0.tar.gz 的压缩包. 有两个方法: 1. 直接运用SCP软件拖进服务器中: 2. 直接用wget下 ...

  7. (SVN笔记)SVN服务端+SVN客户端Tortoise——安装配置

    目录 1.前言 2.官网下载SVN服务端1.14.1 3.安装SVN服务端Server 4.官网下载SVN客户端Tortoise4.3.4 5.安装Tortoise 6.验证Tortoise安装 7. ...

  8. (SVN笔记)https外网IP端口映射内网IP端口访问SVN服务端

    目录 1.前言 2.花生壳优点与相关技术 3.设置SVN服务器 4.外网IP映射内网IP访问SVN Server 5.总结 1.前言         上一章介绍了局域网内https服务端配置与客户端联 ...

  9. 鸟叔linux私房菜基础篇简体,鸟叔的Linux私房菜基础篇-学习笔记(一)

    鸟叔的Linux私房菜基础篇-学习笔记(一) 开机进入命令行模式: ctrl+alt+[F1-F6]的任意键进入命令行编辑界面 ctrl+alt+F7进入图形界面模式 开始下达指令 [dmtsai@s ...

最新文章

  1. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
  2. ACMNO.9求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入。 输入 n 输出 a=2 时
  3. git 创建邮箱 用户名_git设置用户名和邮箱
  4. [Google Guava] 2.4-集合扩展工具类
  5. 预告丨大型出海知识盛宴,邀您一起 enjoy !
  6. js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
  7. java erlang_Java开发人员的Erlang
  8. JSP Workshop
  9. 知乎发布“战疫”数据报告:“新型肺炎”相关回答获17.3亿次阅读
  10. 服务器端渲染为什么会比较快,原理是什么?
  11. 标准模板库(STL)之 priority_queue 列传
  12. Java /Jsp 执行操作系统命令 windows/Linux
  13. 发改委:扩大优质民营企业债券发行规模
  14. MyEclipse10安装properties文件插件
  15. 基于java springboot博客管理系统设计和实现
  16. 知乎python小项目_python进阶知乎
  17. python爬取b站视频封面_Python实战爬虫——B站封面爬取
  18. Lounge Lizard EP-4 for Mac(电钢琴插件)v4.2.5破解版
  19. Docker一些使用问题的解决方法
  20. 迷你世界一直显示服务器未连接,迷你世界为什么显示没网 | 手游网游页游攻略大全...

热门文章

  1. SylixOS 经得起检验的国产操作系统 (四)
  2. ESP8266-Arduino编程实例-TMP102数字温度传感器驱动
  3. SSLOJ 1317.灵魂分流药剂
  4. python调用百度AI接口实现人像分割
  5. ISMS整体项目进度表
  6. 行为型模式——备忘录模式(Memento Pattern)
  7. Flutter Card使用
  8. 聊一聊DNS劫持那些事
  9. MULTISIM 仿真 数据选择器构成无触点切换电路
  10. dtoj#4259. 越野赛车问题