分布式网游server的一些想法(一) 语言和平台的选择

国内网游已经发展了很多年了,开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者C++ + LUA 到现在 很多公司开始使用erlang,java,c#。目前是一个百花齐放的局面。

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

1. 语言类库是否齐全。

    如果用C++ 或者C来搞,我想很多东西得自己重新编写,写出来的东西还未必正确。费时费力费钱。另外一些游戏server不可缺少的功能例如ORM,用C基本上没法去做

2. 语言的开发效率

    一个好的IDE可以极大的提高开发效率,C# VS Java eclipse都很不错,python, lua, erlang IDE支持就很弱了,C&C++编译速度太慢导致开发速度明显不如其它语言

3. 语言是否容易上手,人员是否好招。

    C++对开发人员要求极高,人不好招,价钱还贵,用erlang,python,lua的人实在太少

4. 语言的容错性是否较好。

    C&C++很难避免coredump,server一旦挂掉,用户体验会明显下降,损失的可是钱啊。另外C C++较难热更新,这点python lua C# erlang都能比较容易做到,出了些小bug可以不重启服务器就能更新逻辑,对分布式网游服务器来说至关重要

5. 语言是否有良好的异步语法支持

    分布式服务器架构,server与server之间必然会有大量交互。由于游戏逻辑很难拆分成多线程,所以一般来说都是逻辑单线程+异步远程调用,所以,语言的异步语法支持不可或缺。

C语言异步支持十分差,很难做,C++有lambda std::bind std::function有限支持,仍然难以写大量异步逻辑,而且C++回调的方式会将逻辑撕扯的支离破碎。python和lua都有类似协程支持。C#有async await支持,C#还有WCF框架支持,远程调用就像本地调用一样。java异步也比较难写。erlang天生就是分布式语言。

6. 服务器选择windows linux

    linux免费,windows需要购买,linux维护人员难找,价格高,windows维护人员比较好找,价格稍微便宜。会linux开发的人比较难找,价格高,会windows开发的到处都是。

C# 如果要使用WCF那就只能在windows上开发了,如果不用wcf那么 linux上mono也可以跑C#

其实window server和visual studio授权比起开发人员的薪水来说还是比较少的,假如你的游戏火起来需要大量windows server,估计你也不会在意这些钱了

7. 动态语言或是静态语言

    C&C++ C# JAVA是静态语言,python lua是动态语言,静态语言编译时能发现绝大部分问题,而动态语言需要运行到那一步才能发现bug。静态语言需要编译,C&C++编译速度实在让人难以忍受,java和C#还好,动态语言不需要编译。python lua另外一个优势在于可以热更新,这点C#也可以做到。

8. 语言的性能

    python性能比较差,不过,对于分布式server来说,语言的性能可能不是那么重要了,一个进程支撑1000人就足够了,基本上都能满足

所以综上来说,我会选择windows平台C#。

原文地址:https://www.cnblogs.com/egametang/p/2771823.html