11种服务器编程语言对比(附游戏服务器框架) 2020.06
各语言对比
语言 | 版本 | TIOBE排名 | 垃圾回收 | 类型系统 | 性能 | Web后端 | 非Web后端 | 特性 |
---|---|---|---|---|---|---|---|---|
Java | 14 | 2 | 是 | 中 | ||||
Python | 3.8 | 3 | 是 | 动态 | 低 | |||
C++ | 17 | 4 | 高 | 不适合 | ||||
Node.js | 14 | 7* | 是 | 动态 | 低 | |||
PHP | 7.4 | 8 | 是 | 动态 | 低 | 不适合 | ||
Go | 1.14 | 12 | 是 | 中 | ||||
Ruby | 2.7 | 13 | 是 | 动态 | 最低 | 不适合 | ||
Rust | 1.44 | 20 | 高 | 不适合 | 独特的内存安全机制 | |||
Lua | 5.4 | 38 | 是 | 动态 | 低 | 不适合 | 通常配合 c/c++ 使用 | |
Erlang | 23 | 50+ | 是 | 动态 | 低 | 函数式编程 | ||
.NET | 中 | 开发 windows 服务器 |
* python 为使用 pypy 的性能
* 语言本身的性能主要体现在CPU密集型任务中,且不同类型的任务差距较大,对于IO密集型任务主要考虑是否容易实现高并发
网站语言使用率
Java
- 功能强大,类库完善,适合开发各种大型项目,适合多人开发
- 较好的开发效率和运行性能
- 新版本解决了 GC 高延迟的问题,可用于开发低延迟服务器
- Spring Boot 解决了 Spring 过于臃肿的问题,可以快速搭建小型服务器
- 不支持协程(未来有计划支持,见 Project Loom)
Python
- 随着机器学习的兴起迅速流行起来,也可以单独作为脚本使用
- 适合快速搭建中小型服务器
- 脚本语言的通病,不适合开发大型项目,较难维护和重构
- 一些服务器使用底层 c/c++、上层 python 开发
C++
- 系统级编程语言,常用于系统软件或嵌入式
- 高性能
- 学习成本高,开发效率低,内存不安全,非常容易写出 bug
- 曾经是游戏服务器常用的语言(据说腾讯游戏多使用c++),但现在可以用 Java、Go、Rust 等代替
- 非跨平台,但问题不大,服务器一般是 Windows 开发,Linux 运行,Visual Studio 本身就支持这一点
可以使用 Visual Studio 在 Windows 上编辑、调试 linux c++程序,而程序运行在远程Linux服务器、或Windows 的 linux 子系统中
https://docs.microsoft.com/en-us/cpp/linux/download-install-and-setup-the-linux-development-workload?view=vs-2019
Node.js
- 使用 js 语言,适合前端人员开发后端
- 适合做 serverless 开发
- 除此之外 Node.js 在性能、高并发、易用程度上并没有独特优势
PHP
- 世界上 80% 的 Web 服务器由 PHP 开发
- 适合快速搭建中小型 Web 服务器
- 多使用 Laravel 框架
- 作为脚本语言,同样不适合开发大型项目
- PHP7 版本极大提升了性能(仍比Java差很多)
Go
- 语法简洁、设计良好,易于学习,开发效率高
- 运行效率较高
- 便于开发高并发服务器
- 目前发展很快,很多公司都开始用 Go 开发 Web 服务器 、游戏服务器或系统级应用
- Go 没有继承只有接口,这不是一个缺点,方法覆盖并不符合里氏替换原则,很难维护
Ruby
- 适合快速搭建中小型 Web 服务器
- 使用 Ruby On Rails 框架
- 脚本语言,做 Web 开发与 PHP、Python 类似
- 性能很低
Rust
- Rust 是系统级编程语言,性能可媲美 c 语言
- 有独特的内存安全机制
- 微软发现 70% 的操作系统 bug 是空指针等内存安全问题造成的,于是尝试用 Rust 代替 c/c++
- 可用于开发高性能服务器
- 学习成本高
- 类库较少
Lua
- 脚本语言,可用于扩展 c/c++
- 常用于编写游戏服务器的上层逻辑
Erlang
- 函数式语言
- 便于开发高并发、分布式服务器
- 常用于游戏服务器、消息系统等
.NET
- .NET 是一个平台,支持 c#、VB、ASP等语言,有一个类似JVM的公共语言运行库,Web 开发用到 ASP.Net、ASP.Net MVC、ADO.Net 等
- 用于开发 Windows 服务器,目前也支持跨平台
- 适合开发大型项目
开源游戏服务器框架
框架 | 语言 | 特点(仅供参考) | github star | 其他 |
---|---|---|---|---|
pomelo | Node.js | 易扩展 分布式 适合小游戏 | 10.9k | 作者为网易 |
Skynet | c lua | 消息处理框架 | 9.1k | 作者为网易云风 |
KBEngine | c++ Python | 适合大型 MMO | 4k | |
leaf | go | 游戏框架 | 3.6k | |
mqant | go | 分布式微服务框架 | 1.9k | |
goworld | go | 分布式 | 1.5k | |
cellnet | go | 分布式 | 3.2k | |
pitaya | go | 分布式 | 0.6k | |
Scut | c# Python lua | 游戏框架 | 1.2k | |
Cuberite | c++ | Minecraft 服务器 | 3.2k | |
agones | go | 基于k8s 分布式 | 3.2k | |
NoahGameFrame | c++ c# lua | 可扩展 分布式,可用于 MMO MOBA | 2.5k | |
ET | c# | 配合 Unity3d 使用 | 3.5k |
编程语言族谱
https://www.levenez.com/lang/lang.pdf
11种服务器编程语言对比(附游戏服务器框架) 2020.06相关推荐
- (转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)
干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译 参与:老红.李亚洲 就像雨季后非洲大草原许多野 ...
- 图解LSTM神经网络架构及其11种变体(附论文)
来源:机器之心 英文原文:Deep learning architecture diagrams 参与:老红.李亚洲 原文链接:图解LSTM神经网络架构及其11种变体(附论文) 本文经机器之心(微信公 ...
- 请允许我用2019年11种主流编程语言,祝祖国70华诞快乐!
------·今天距2020年91天·------ 这是ITester小栈第45次推文 大家好,我是coco 小 锦鲤 今天是十月一日 举国同庆 喜大普奔 风调雨顺 让我们用11种主流编程语言 祝福祖 ...
- 战地4服务器物理地址,战地4 游戏服务器地址
战地4 游戏服务器地址 内容精选 换一换 部署游戏应用前,您需要准备硬件以及华为云的环境,主要包括以下内容:硬件环境:您需要准备一台带有显卡的Windows机器,硬盘至少20G,用于运行游戏客户端.若 ...
- 游戏获取服务器信息,易语言获取游戏服务器信息
易语言获取游戏服务器信息 内容精选 换一换 使用Touch对终端进行配置前需要先将Touch接入终端,接入方式包括TOUCH口连接.交换机网口连接和Wi-Fi连接.TOUCH口连接将Touch接入终端 ...
- 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡
游戏服务器高可用负载均衡 内容精选 换一换 公有云提供弹性公网IP(EIP).NAT网关.弹性负载均衡(ELB)等方式连接公网.EIPEIP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务. ...
- win10系统做游戏服务器吗,win10架构游戏服务器
win10架构游戏服务器 内容精选 换一换 弹出"创建推理服务"窗口.设置基础配置信息,然后单击"下一步".基础配置信息参数名称参数说明基础配置名称1-50个字 ...
- 虚拟主机做游戏服务器,虚拟主机做游戏服务器
虚拟主机做游戏服务器 内容精选 换一换 应用容器化改造有三种方式,您可单击这里查看.本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化.本教程不对改造细节做深度讲解,仅讲解大致的建议.如需 ...
- 手机捕鱼服务器维护,手机捕鱼游戏服务器
手机捕鱼游戏服务器 内容精选 换一换 简要介绍KBEngine是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D.OGR ...
- 游戏服务器维修怎么回事,游戏服务器维护都是在做些什么?
有很多网友问笔者:你从事IDC行业这么多年,卖过空间域名,帮不同企业部署不同类型网站架构,也处理过一些服务器故障,那你知道不知道游戏服务器维护都需要做些什么? 来,笔者找了一个前网易游戏从业人员来说说 ...
最新文章
- Spring学习笔记_IOC
- StringBuilder、StringBuffer、String区别
- MS SQL入门基础:备份和恢复系统数据库
- HTML语言的含义,HTML是什么意思
- oracle数据库enq: TX - allocate ITL entry性能诊断
- 一步一步写算法(之爬楼梯)
- java字符如何向float转换_java – 将float转换为字符串分数表示
- android获得其他应用窗口,安卓一个程序调用其他程序的任一界面问题
- ASP.NET MVC 5 笔记
- 基于Arduino的蓝牙电子秤
- LabVIEW笔记(一)
- 利用Flourish制作动态条形图
- jQuery 3d云标签
- 163VIP邮箱全新域名上线,见证蜕变开启全新的VIP邮箱体验!
- ​PDF怎么转换成Word?试试这几种好用的转换方法
- mysql sql查询时区_MySQL查看和修改时区的方法
- react 断网提示
- 【AntdVue】下拉选择框乱回弹问题
- 800份企业管理资料,股权方案模板(收购+优化+激励+代持+分配等),共140M
- ubuntu18.04 使用calibration_camera_lidar 实现激光雷达和相机联合标定
热门文章
- 樱花动漫中的视频下载分析
- 双向三相交错并联DC-DC变换器
- 双向BUCK BOOST DCDC变换器仿真模型 BUCK BOOST 拓扑结构,电压电流双闭环控制策略
- kb4023057安装失败_微软向旧版Windows 10推送易升补丁出现无法安装问题
- matlab2016对硬件要求,matlab2016b配置libsvm的各中坑及解决办法
- 字体变换大小的html代码,JQuery 实时改变网页字体大小的代码
- 跳级全奖进哈佛,连马云都忌惮三分,赚18个亿后隐退美国,如今的他在干什么?...
- Linux 开发环境搭建与使用——SlickEdit 的安装与配置
- 新手初识安信可ESP8266 12f机智云开发板微信直连云
- 02_行销(Marketing)里用逻辑回归来找寻顾客参与度后面的原因