服务器开发语言比较

以下比较的基础都是基于一种编程语言+一定的第三方或者自己编写的网络库和底层进行的,Skynet稍微特殊,但总体比较合适放到比较中来

C#

开发效率:Windows下可以通过VisualStudio进行开发,其他平台可以使用MonoDevelop,非常方便

运行效率:JIT的性能优化比较到位,能适应90%性能环境

部署便捷性:可以通过交叉编译生成其他平台的可执行文件,通过mono运行可执行文件

调试便捷性:VisualStudio和MonoDevelop调试均很方便, 还可远程调试

上手度:对C系语言熟悉的几天就可上手

热更新:可以通过DLL方式进行

Web对接:可做,代码比较啰嗦

崩溃处理:可通过try catch捕获错误

网络库编写难度:一般,需注意gc问题

第三方网络库及框架数量:一般

Golang

开发效率:高

运行效率:并发上非常有优势,对CPU利用率比较高,原生运行无虚拟机

部署便捷性:一次编译到处运行,无任何运行库依赖

调试便捷性:实际操作中,单线程挂接调试器可行, 但变量显示不正确,开发期基本采用日志方式进行查错

上手度:语言简单,特性少, 新手1周能贡献代码

热更新:无法进行热更新,语言无法编译为DLL,也不支持DLL加载(linux平台的.so加载忽略不计)

Web对接:非常方便, 代码精简

崩溃处理:崩溃后以命令行方式打印出栈,程序内可以捕获任何崩溃错误并继续运行

网络库编写难度:简单,比C socket更简单

第三方网络库及框架数量:偏少

Skynet(lua+C)

开发效率:基于动态语言的开发初次写比较快,后期维护和重构会耗费一定的时间在查错上

运行效率:基于lua jit的运行效率还是能接受的

部署便捷性:方便, 只有底层修改需要重新编译, 大部分时间只用更新lua文件

调试便捷性:不是很方便,基于日志方式进行查错

上手度:lua语言特性有部分和C系语言有一定差异,基于Actor模型的思想学习,适应需要耗费一定的时间

热更新:类似于Erlang,可精确到函数级的热更新

Web对接:有一些http支持,通过社区慢慢进行完善

崩溃处理:lua天生可以捕获错误

网络库编写难度:自带,无需编写

第三方网络库及框架数量:通过社区慢慢完善

C++

开发效率:编译慢,文件多,通用库少

运行效率:native速度标杆

部署便捷性:编写各类的make门槛较高

调试便捷性:可通过VisualStudio进行Windows平台调试

上手度:2~3年经验的熟手仍然会写出崩溃和泄露代码

热更新:可通过DLL进行

Web对接:代码啰嗦,第三方库少

崩溃处理:Windows下可使用SEH捕获段异常,其他平台只能通过崩溃后进行coredump分析,容错非常差

网络库编写难度:基于asio编写较为简单,但总体看来难度不低

第三方网络库及框架数量:较多

以下是得分

从发文时的项目对这些语言使用率来说,Java,Erlang,C++编写的服务器较多,Golang,JavaScript,C#是第二梯队,Skynet由于上手不是很容易,所以仅有两位数的团队在使用,但总体表现还是比较出色的

对于老团队, C++的服务器工具链和框架已经相对成熟, 完全没必要更换新语言, 只是在对接sdk感觉困难时,可以尝试Golang这些对web有优势的语言进行混合语言开发

对于新团队,开发效率,上手度和部署效率是优先选择的,C#,Golang,JavaScript这些新兴语言会让你事半功倍

对于大规模无需选服的服务器, Skynet的actor模型对扩展会比较容易

对于大公司,好项目,上线后需要通过热更新进行bug修补的,C#,C++,Erlang会是首选

但总的一点, 还是根据团队熟悉度来选择语言,贸然的使用新语言的风险也是很大的

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

JVM并不是那么重量级

译者注:很多人误认为JVM是一个很重量级的框架,本文作者之前也是这么认为的,但是在这篇文章中,作者从几个层面分析了一下,可以看出JVM并不是我们想象中的那么“重...

28750
来自专栏陈树义

【超实用】面对枯燥的源码,如何才能坚持看下去?

一个软件开发人员,工作到了一定的年限(一般是3、4年左右),如果他还没学会阅读源码,那么他就会遇到瓶颈。因为到了这个时候的开发,他应该不仅仅只会做那些 CURD...

16750
来自专栏张戈的专栏

妹子你真萌:一次心惊肉跳的服务器误删文件的恢复过程

刚在我的订阅里面看到这篇文章,在爆笑之余也让跟我一样的运维农民工们发人深省,所以转过来分享一下。妹子啊妹子,网上找的东西也不能直接照搬啊,太萌了~~哈哈! 作者...

653110
来自专栏Golang语言社区

服务器开发语言比较

下比较的基础都是基于一种编程语言+一定的第三方或者自己编写的网络库和底层进行的,Skynet稍微特殊,但总体比较合适放到比较中来 C# 开发效率:Windows...

714130
来自专栏数据之美

浅谈用户行为分析之用户身份识别:cookie 知多少?

对于数据统计分析或者数据挖掘而言,用户是个非常重要的维度,也是统计分析能落地的基础。一般而言,咱们追踪或者识别一个用户的首选方案是 userID,大多数公司的产...

1.3K60
来自专栏编程微刊

推荐一款在线工具-程序员的工具箱

27640
来自专栏程序员与猫

单元测试之道

标签: 单元测试 前言 系列 1. 前言 在一个项目当中,开发者常常要做大量的测试工作,如单元测试,集成测试,回归测试,压力测试 .etc。当然,依据项目情况大...

18760
来自专栏腾讯Bugly的专栏

Luakit的前世今生

最近发布了一个跨平台的app开发框架Luakit。那怎么会想到做这样一个东西呢?

38340
来自专栏Java技术分享

谈谈MVC模式

1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一...

22070
来自专栏BIT泽清

IOS 2.1和4.3条款被拒?金融股票配资,社区交流类APP苹果过审方案

苹果开发者上传APP最头痛的三件事就是等待审核、正在审核和审核不通过。据2018年5月之前,苹果方其实对APP的审核力度并不是很大,后因为世界杯的到来,众多的菠...

43600

扫码关注云+社区

领取腾讯云代金券