用C++编写服务端程序?

为什么用C++编写服务器程序。

这个问题看起来是很另类的,但又何尝不可。

那么换一种方式来问,如果开发一个服务器,你会选择什么语言?

  1. 我想答案会在这些语言中产生:JAVA,Python,PHP,C#,Node.JS,其他脚本语音,唯独不会想起来C,C++。

    这些编程语言好像已经成了服务器的专属,我想最重要的原因是,这些语言拥有数不胜数的插件,拥有优秀的开源框架,拥有良好的开发IDE。

  2. 那么我们为什么会想到用C++开发呢?

    • 因为我只会C++,这个答案很好。

    • 还有人的答案是性能,但是这个答案肯定有人会满不在乎。觉得性能不够的话, 只要加机器就可以了。集群,分布式,搞起来。

    然而更少的机器,意味着更低的能耗,更少的硬件投入,更少的人力资源投入去维护机器。总而言之,更低的成本。

    • 肯定还会有人说,C++的开发速度太慢了。

    开发的慢是因为:学习成本高,开发效率低,内存不安全,非常容易写出 bug。

然而这并不是绝对的。

C++也可以做到非常快速的开发。有句俗语 “脚本一时爽,重构火葬场” 说的正是脚本语言开发的项目进入维护阶段后无穷的灾难。

还有一点我觉得是对于服务器开发层面,C/C++优越于其他语言的地方。

其他语言开发的服务器,更多的其实是web服务器,走ws架构,基于浏览器的话,也就是应用层无非就是http/https,ws/wss,mqtt等。

如果服务器和客户端之间的协议,走的是基于TCP的自定义应用层协议,不采用http格式封装,直接是一个16进制数据。

如果服务器和客户端之间走UDP协议,或者是rtp,rtsp等流媒体协议呢?

那么C/C++的可选择性就大了。

C++ 经过了几十年的发展, 拥有庞大的工具链. 不管是动态分析还是静态分析都有大量的工具, 能极大的帮助程序员减少错误

c++得益于精良的设计,严格的检查,越是大型的工程,越是能降低开发成本。

但这并不意味着C++就不适合小型项目了。

小型的项目,也可以快速开发。因为C++11开始,已经感觉像是全新的语言了,可以完全以脚本的形式去使用,获得接近甚至超越脚本语言的开发速度,同时得益于编译优化,获得不俗的运行时性能。

事实上如果使用C++开发服务端程序,你有多得数不清的选择。ACE,libuv,libevent,libev,甚至可以直接使用 epoll/iocp 这样的系统API。