11种服务器编程语言对比(附游戏服务器框架) 2020.06

2023-05-16

各语言对比

语言版本TIOBE排名垃圾回收类型系统性能Web后端非Web后端特性
Java142
Python3.83动态
C++174不适合
Node.js147*动态
PHP7.48动态不适合
Go1.1412
Ruby2.713动态最低不适合
Rust1.4420不适合独特的内存安全机制
Lua5.438动态不适合通常配合 c/c++ 使用
Erlang2350+动态函数式编程
.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其他
pomeloNode.js易扩展 分布式 适合小游戏10.9k作者为网易
Skynetc lua消息处理框架9.1k作者为网易云风
KBEnginec++ Python适合大型 MMO4k
leafgo游戏框架3.6k
mqantgo分布式微服务框架1.9k
goworldgo分布式1.5k
cellnetgo分布式3.2k
pitayago分布式0.6k
Scutc# Python lua游戏框架1.2k
Cuberitec++Minecraft 服务器3.2k
agonesgo基于k8s 分布式3.2k
NoahGameFramec++ c# lua可扩展 分布式,可用于 MMO MOBA2.5k
ETc#配合 Unity3d 使用3.5k

编程语言族谱

https://www.levenez.com/lang/lang.pdf

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11种服务器编程语言对比(附游戏服务器框架) 2020.06 的相关文章

随机推荐

  • Visual Studio 未能正确加载包问题

    近期 xff0c 安装VS插件的时候 xff0c 出现了包未能正确加载的问题 见下图 针对这个问题 网上找了一些答案 可以有以下2种方法 1 重置VS用户数据 2 删除VS注册表后重装VS 针对第1种重置用户数据 只要找到VS exe文件路
  • Go get命令出现terminal prompts disabled解决

    Go get命令出现terminal prompts disabled解决 ubuntu 64 ubuntu go get u github com XXX OOOO cd git clone https github com XXX OO
  • java反编译工具jd-gui-osx for mac M1芯片无法使用

    目录 下载Java Decompiler JD Java Decompiler http java decompiler github io 提示jdk错误 记录一下遇到的问题 话不多说 直接上步骤 打开官网后点击JD GUI栏目的Down
  • Keil(MDK-ARM-STM32)介绍、下载、安装与注册

    写在前面 本文讲述的内容是Keil MDK ARM版的介绍 下载 安装与注册 xff0c 如果需要了解Keil C51版相关的文章 xff0c 可以到我博客 xff0c 或微信公众号查看并下载 Keil xff08 C51 xff09 介绍
  • 操作系统实验——进程管理与进程通信

    广州大学学生实验报告 实验一 进程管理与进程通信 一 实验目的 1 掌握进程的概念 xff0c 明确进程的含义 2 认识并了解进程并发执行的实质 xff0c 进程的阻塞与唤醒 xff0c 终止与退出的过程 3 熟悉进程的睡眠 同步 撤消等进
  • 关于FreeRTOS的vTaskDelayUntil()延时函数的理解

    关于任务操作的相关函数走读 函数vTaskDelayUntil if INCLUDE vTaskDelayUntil 61 61 1 参数pxPreviousWakeTime xff1a 上一次任务唤醒时间点 xff0c 任务中第一次调用该
  • 关于FreeRTOS的系统时钟节拍

    不管是什么系统 xff0c 运行都需要有个系统时钟节拍 xTickCount就是FreeRTOS的系统时钟节拍器 在每个滴答定时器中断中xTickCount 43 1 xff0c 比如stm32中 xff0c 具体是在delay c中的vo
  • python基础:for循环和while循环区别和相同点,range函数介绍

    循环语句可以让计算机重复和自动的执行代码 xff0c 减少人的工作量 文章目录 for循环while循环两种循环对比 for循环 格式 for in 循环语句 xff0c 简称for循环 xff1b 先看下它的格式吧 span class
  • 不忘初心•砥砺前行——江苏叁拾柒号仓智能科技有限公司2019年中总结会

    2019年7月20日上午 xff0c 江苏叁拾柒号仓智能科技有限公司 下称37号仓 2019年中总结会在集团1楼多媒体厅隆重举行 xff0c 37号仓执行董事魏标 xff0c 总经理卞石磊 xff0c 子雨集团党支部书记 工会主席徐伟 xf
  • python基础:布尔运算和四个语句

    布尔运算 计算机的逻辑判断 xff0c 只有True 判断为真 和alse 判断为假 两种结果 xff0c 计算真假的过程就叫做布尔运算 xff0c True和False就是布尔值 while和if中的布尔运算 相同点 xff1a 在whi
  • 解读编码和文件读写

    解读编码和文件读写 编码的本质就是让只认识0和1的计算机 xff0c 能够理解我们人类使用的语言符号 xff0c 并且将数据转换为二进制进行存储和传输 这种从人类语言到计算机语言转换的形式 xff0c 就叫做编码表 xff0c 它让人类语言
  • BeautifulSoup库的简单使用

    BeautifulSoup是什么 网页解析库BeautifulSoup xff0c 用来解析和提取网页中的数据 安装BeautifulSoup库 BeautifulSoup库目前已经进阶到第4版 xff08 Beautiful Soup 4
  • 运行地面站详细步骤

    第一步 xff1a 打开bin目录 xff0c 保留Backup DLL文件夹 xff0c 删除除Backup DLL文件夹之外的所有文件 xff1b 第二步 xff1a 打开Backup DLL文件夹 xff0c 复制里面所有的dll 粘
  • 关于qt和js的html一些修改

    1 调试打印js文件 maptype tms html 文件 xff0c 没有qdebug 和printf 可以用 xff0c 但可以用alert 来代替 xff0c 用alert 地图上会出现对应窗口显示 xff0c 来判断程序 逻辑 2
  • qt+directshow usb摄像头及音频设备录制视频

    最近来了个项目 xff0c 有一块功能是usb摄像头录制视频并且录音的实现 xff0c 网上的东西七七八八什么技术都有 xff0c 先用opencv打了半天环境不能录音频 xff0c 后来用ffmpeg xff0c 原谅我太菜 xff0c
  • VSCode中Git解决冲突的步骤

    VSCode中Git解决冲突的步骤 1 gt gt 合并分支后 如果存在冲突 右下角会出现一个提示框 提示 存在合并冲突 请在提交之前解决这些冲突 2 gt gt 左边导航第三个图标中 xff0c 找到产生冲突的文件 3 gt gt 打开文
  • VsCode一定要安装的几个插件

    1 Vetur VUE语法高亮 智能感知 Emmet等 xff0c 包含格式化功能 xff0c Alt 43 Shift 43 F xff08 格式化全文 xff09 xff0c Ctrl 43 K Ctrl 43 F xff08 格式化选
  • ccm-slam环境配置

    ccm slam 配置过程记录 介绍 xff1a 一种协同视觉slam方法 传统的slam是一个机器人完成定位与建图的任务 xff0c 但对于大范围的环境 xff0c 多机器人协同建图往往能提高效率 xff0c ccm slam就是基于这个
  • 从大到小排序,Comparator类型

    import java util Arrays import java util Comparator public class Main public static void main String args 注意 xff0c 要想改变默
  • 11种服务器编程语言对比(附游戏服务器框架) 2020.06

    各语言对比 语言版本TIOBE排名垃圾回收类型系统性能Web后端非Web后端特性Java142是中Python3 83是动态低C 43 43 174高不适合Node js147 是动态低PHP7 48是动态低不适合Go1 1412是中Rub