为什么使用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开源地址地址:egametang/ET: Unity3D Client And C# Server Framework (github.com)   qq群:474643097

ET介绍——为什么使用C# .net core做服务端?的更多相关文章

  1. .net core signalR 服务端强制中断用户连接

    .net core signalR 服务端断开连接 { } { } *:first-child { } *:last-child { } { } { } { } { } { } { } { } { } ...

  2. SSE技术详解:使用 HTTP 做服务端数据推送应用的技术

    SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议. 严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来 ...

  3. 用php模拟做服务端侦听端口

    参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken200 ...

  4. 如何使用Vue2做服务端渲染

    花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500-700ms之间,SS ...

  5. asp.net core webapi 服务端配置跨域

    在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加 ...

  6. windows下百度离线人脸识别本地部署与使用(nodejs做客户端,c++做服务端,socket做通信)

    1.离线人脸识别本地部署 详情请阅读百度人脸识别官网 2.nodejs做socket通信的客户端 为什么不直接通过调用c++编译的exe获得人脸识别结果? 原因:exe运行时会加载很多模型而消耗很多时 ...

  7. 从架构师视角看是否该用Kotlin做服务端开发?

    前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...

  8. .net core api服务端跨域配置

    第1步:添加包引用(.net core 2.2 已自带此包,可跳过此步骤) Install-Package Microsoft.AspNetCore.Cors 第2步:在Startup.cs文件的Co ...

  9. linux c做服务端使用多线程接收图片并且将图片写入数据库

    #include<sys/socket.h> #include<sys/types.h> #include<sys/stat.h>//包含文件的全部结构,属性 #i ...

  10. Qt通过HTTP POST上传文件(python做服务端,附下载)

    本文使用Qt Creator用HTTP POST的方法上传文件,并给出一个上传文件的例程. 本文主要客户端,所以对于服务器端程序编写的描述会比较简略 服务器使用Django编写,django服务器接收 ...

随机推荐

  1. 实操开源版全栈测试工具RunnerGo安装(四)Windows安装

    以windows 10系统为例 视频教程:https://www.bilibili.com/video/BV14H4y1C71u/?spm_id_from=333.999.0.0 1.设置手动进入系统 ...

  2. golang常用库包:http和API客户端请求库-go-resty

    简介 golang 里的 http 标准库,发起 http 请求时,写法比较繁琐.所以智慧又"偷懒的"程序员们,发挥自己的创造力,写出了一些好用的第三方库,这里介绍其中的一个 ht ...

  3. 【Android 逆向】r0zapataNative.apk 破解

    1. apk 安装到手机,需要输入内容,随便输入,提示fail... 2. apk 导入到jadx中查看一下 MainActivity.java String textData = "b2F ...

  4. Codeforces(1500板刷)

    目录 写在前面 1. A. Did We Get Everything Covered?(构造.思维) 题目链接 题意 题解 代码 总结 2 F. Greetings(离散化+树状数组) 题目链接 题 ...

  5. system-design-primer 系统设计面试题

    system-design-primer 关键词:分布式.高并发.系统设计.面试 看腻了互联网上零碎.纷繁的面试题目? 来看看这个仓库吧,他系统介绍了对于大型系统的设计问题,并为系统设计面试做准备. ...

  6. springboot参数据校验

    什么是Hibernate Validator? Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验. 官网:http://hibe ...

  7. linux下,使用nginx实现动静分离,访问图片报404

    一.需求描述 最近在开发一个微信小程序,由于微信小程序端代码包总大小限定在三四兆,所以有很多的图标资源就不能放在微信小程序中进行打包, 否则会超过微信的限制而无法打包.自己能够想到的最简单的办法就是将 ...

  8. python tkinter - pickle 持久化

    查看当前python版本命令 cmd - python 现在当前版本是 3.8.8 tkinter - tool kits interface

  9. 基于ads1299生物电信号采集研发总结之参考信号的接法

    一 概念 ads1299的电极端有两种采集方式,单端和差分.两种的使用方式又有很大的区别,怎么高质量的采集信号,这个是一个比较难的问题. 二 解析 参考信号SRB1的接法,决定了采集到数据的精确度和信 ...

  10. C++多态底层原理:虚函数表

    虚函数表 C++ 对象模型 在有虚函数的情况下,C++对象的模型可以概括为:虚函数表指针+数据struct.在对象所在的内存里:前8个字节(64位系统)是虚函数表所在地址,后边是对象中的member ...