ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)
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的支持 | 好 | 好 | 好 | 普通 | 差 | 差 | 差 |
语言的性能 | 好 | 极好 | 好 | 好 | 差 | 很差 | 差 |
从表格可以看出:
- C/C++稳定性差,编译速度慢,存在致命缺陷
- Go不支持热更,由于不支持泛型,重构性较差,无法跟客户端共享代码,存在致命缺陷
- Java协程支持差,无法跟客户端共享代码
- Lua库少,性能差,代码可阅读性可重构性差,跨平台完全依赖C/C++,处理起来麻烦,ide支持差
- Python 性能很差,代码可阅读性可重构性差,无法跟客户端共享代码,ide支持差
- Erlang 性能差,函数式风格不好上手,ide支持差
- C# .net core各个方便都非常优秀,不过跟UE4无法共享代码
当前Unity是最火的游戏引擎,C#服务端搭配Unity完全是天作之合,基本上找不到缺陷。
ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)相关推荐
- 我问你这篇保熟不?! -- 做服务端开发,不懂网络层,真的可以吗?
文章目录 唠嗑两句·网络层 网络层简介 网际协议IP 常见的三类IP地址 A类 B类.C类 IP地址与硬件地址 地址解析协议ARP IP层转发分组 子网划分 子网划分的背景意义 什么是子网划分? 子网 ...
- (SVN笔记)https内网IP端口配置SVN服务端+内网SVN客户端联合使用
目录 1.前言 2.SVN服务端设置 3.开始使用SVN (1)新建版本库 (2)迁入项目到SVN服务端 (3)检索项目/拉取项目check out (4)提交代码commit (5)更新代码upda ...
- webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)...
服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...
- 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复
立即学习:https://edu.csdn.net/course/play/24458/296236?utm_source=blogtoedu 1.修复端口被占用的bug import socketp ...
- AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)
1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...
- 物联网学习篇:Python SDK接入阿里云物联网平台,接收服务端订阅消息
1. 下载SDK SDK下载链接 下载之后,可见得到了一个 qpid-proton-0.29.0.tar.gz 的压缩包. 有两个方法: 1. 直接运用SCP软件拖进服务器中: 2. 直接用wget下 ...
- (SVN笔记)SVN服务端+SVN客户端Tortoise——安装配置
目录 1.前言 2.官网下载SVN服务端1.14.1 3.安装SVN服务端Server 4.官网下载SVN客户端Tortoise4.3.4 5.安装Tortoise 6.验证Tortoise安装 7. ...
- (SVN笔记)https外网IP端口映射内网IP端口访问SVN服务端
目录 1.前言 2.花生壳优点与相关技术 3.设置SVN服务器 4.外网IP映射内网IP访问SVN Server 5.总结 1.前言 上一章介绍了局域网内https服务端配置与客户端联 ...
- 鸟叔linux私房菜基础篇简体,鸟叔的Linux私房菜基础篇-学习笔记(一)
鸟叔的Linux私房菜基础篇-学习笔记(一) 开机进入命令行模式: ctrl+alt+[F1-F6]的任意键进入命令行编辑界面 ctrl+alt+F7进入图形界面模式 开始下达指令 [dmtsai@s ...
最新文章
- Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
- ACMNO.9求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入。 输入 n 输出 a=2 时
- git 创建邮箱 用户名_git设置用户名和邮箱
- [Google Guava] 2.4-集合扩展工具类
- 预告丨大型出海知识盛宴,邀您一起 enjoy !
- js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
- java erlang_Java开发人员的Erlang
- JSP Workshop
- 知乎发布“战疫”数据报告:“新型肺炎”相关回答获17.3亿次阅读
- 服务器端渲染为什么会比较快,原理是什么?
- 标准模板库(STL)之 priority_queue 列传
- Java /Jsp 执行操作系统命令 windows/Linux
- 发改委:扩大优质民营企业债券发行规模
- MyEclipse10安装properties文件插件
- 基于java springboot博客管理系统设计和实现
- 知乎python小项目_python进阶知乎
- python爬取b站视频封面_Python实战爬虫——B站封面爬取
- Lounge Lizard EP-4 for Mac(电钢琴插件)v4.2.5破解版
- Docker一些使用问题的解决方法
- 迷你世界一直显示服务器未连接,迷你世界为什么显示没网 | 手游网游页游攻略大全...