- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
过去几年我一直在用不同的语言编写许多网络守护进程,现在我要开始一个新项目,它需要一个新的自定义实现专有网络协议(protocol)。
上述协议(protocol)非常简单 - 一些基本的 JSON 格式消息,这些消息在一些基本的帧包装中传输,让客户端知道消息已完全到达并准备好进行解析。
守护进程将需要处理多个连接(同时大约 200 个)并对它们进行一些管理并传递消息,就像在聊天室中一样。
过去我主要使用 C++ 来编写我的守护进程。通常使用 Qt4 框架(网络部分,而不是 GUI 部分!),因为这也是我在其余项目中使用的,而且它简单易行且非常便携。这通常工作得很好,我没有遇到太多麻烦。
作为 Linux 管理员已经有一段时间了,我注意到大多数网络守护进程都是用纯 C 编写的(当然也有一些是用其他语言编写的,但我感觉 > 80%的守护进程是用纯 C 语言编写的)。
现在我想知道为什么会这样。这是由于纯粹的历史 UNIX 背景(如 KISS)还是为了简单的可移植性或减少膨胀? 不将 C++ 或任何“高级”语言用于守护进程之类的东西的原因是什么?
提前致谢!
对我来说,使用 C++ 通常更方便,因为我有 对象,它们具有 getter 和 setter 方法等。 Plain C 的“上下文”对象在某些时候可能是一个真正的痛苦 - 特别是当您习惯了面向对象的编程时。
是的,我知道C++ 是C 的超集,而C 代码基本上就是C++ 您可以使用C++ 编译器编译任何C 代码。但这不是重点。 ;)
我知道现在使用高级(脚本)语言(如 Python、node.js 或类似语言)可能更有意义。我过去这样做过,而且我知道这样做的好处(至少我希望我知道 ;)- 但这个问题只是关于 C 和 C++。
最佳答案
我个人想不出有任何技术理由选择 C 而不是 C++。无论如何,我无法立即想到一个对位。
编辑回复编辑:我强烈建议您不要考虑“...C 代码基本上是 C++”。尽管从技术上讲,您可以使用 C++ 编译器编译任何 C 程序(只要您不使用 C 中比 C++ 采用的功能更新的任何功能),我真的试图阻止任何人在 C++ 中编写类似 C 的代码或考虑使用 C++作为“带有对象的 C”。
作为对 C 成为 Linux 标准的回应,只有 C 开发人员一直在说:p C++ 与 C 一样成为 Linux 中任何标准的一部分,并且在 Linux 上制作了各种各样的 C++ 程序。如果你正在编写一个 Linux 驱动程序,你需要用 C 来完成它。除此之外......我知道 RMS 喜欢说你更有可能找到 C 编译器而不是 C++ 编译器,但实际上并没有很长一段时间以来都是如此。您会在几乎所有安装中找到两者或两者都没有。
关于可维护性——我当然不同意。
就像我说的,我想不出一个不能立即被反驳的。反之亦然。
关于c++ - 将 C++ 用于网络守护进程有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704605/
我是 Linux 的新手,并且继承了保持我们的单一 Linux 服务器运行的职责。这是我们的SVN服务器,所以比较重要。 原来在我之前维护它的人有一个 cron 任务,当有太多 svnserve 进程
Node 虽然自身存在多个线程,但是运行在 v8 上的 JavaScript 是单线程的。Node 的 child_process 模块用于创建子进程,我们可以通过子进程充分利用 CPU。范例:
Jenkins 有这么多进程处于事件状态是否正常? 我检查了我的设置,我只配置了 2 个“执行者”... htop http://d.pr/i/RZzG+ 最佳答案 您不仅要限制 Master 中的执
我正在尝试在 scala 中运行这样的 bash 命令: cat "example file.txt" | grep abc Scala 有一个特殊的流程管道语法,所以这是我的第一个方法: val f
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我需要一些帮助来理解并发编程的基础知识。事实上,我读得越多,就越感到困惑。因此,我理解进程是顺序执行的程序的一个实例,并且它可以由一个或多个线程组成。在单核CPU中,一次只能执行一个线程,而在多核CP
我的问题是在上一次集成测试后服务器进程没有关闭。 在integration.rs中,我有: lazy_static! { static ref SERVER: Arc> = {
我正在使用 Scala scala.sys.process图书馆。 我知道我可以用 ! 捕获退出代码和输出 !!但是如果我想同时捕获两者呢? 我看过这个答案 https://stackoverflow
我正在开发一个C++类(MyClass.cpp),将其编译为动态共享库(MyClass.so)。 同一台Linux计算机上运行的两个不同应用程序将使用此共享库。 它们是两个不同的应用程序。它不是多线程
我在我的 C 程序中使用 recvfrom() 从多个客户端接收 UDP 数据包,这些客户端可以使用自定义用户名登录。一旦他们登录,我希望他们的用户名与唯一的客户端进程配对,这样服务器就可以通过数据包
如何更改程序,以便函数 function_delayed_1 和 function_delayed_2 仅同时执行一次: int main(int argc, char *argv[]) {
考虑这两个程序: //in #define MAX 50 int main(int argc, char* argv[]) { int *count; int fd=shm
请告诉我如何一次打开三个终端,这样我的项目就可以轻松执行,而不必打开三个终端三次然后运行三个exe文件。请问我们如何通过脚本来做到这一点,即打开三个终端并执行三个 exe 文件。 最佳答案 在后台运行
我编写了一个监控服务来跟踪一组进程,并在服务行为异常、内存使用率高、超出 CPU 运行时间等时发出通知。 这在我的本地计算机上运行良好,但我需要它指向远程机器并获取这些机器上的进程信息。 我的方法,在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我有一个允许用户上传文件的应用程序。上传完成后,必须在服务器上完成许多处理步骤(解压、存储、验证等...),因此稍后会在一切完成后通过电子邮件通知用户。 我见过很多示例,其中 System.Compo
这个问题对很多人来说可能听起来很愚蠢,但我想对这个话题有一个清晰的理解。例如:当我们在 linux(ubuntu, x86) 上构建一个 C 程序时,它会在成功编译和链接过程后生成 a.out。 a.
ps -eaf | grep java 命令在这里不是识别进程是否是 java 进程的解决方案,因为执行此命令后我的许多 java 进程未在输出中列出。 最佳答案 简答(希望有人写一个更全面的): 获
我有几个与内核态和用户态的 Windows 进程相关的问题。 如果我有一个 hello world 应用程序和一个暴露新系统调用 foo() 的 hello world 驱动程序,我很好奇在内核模式下
我找不到很多关于 Windows 中不受信任的完整性级别的信息,对此有一些疑问: 是否有不受信任的完整性级别进程可以创建命名对象的地方? (互斥锁、事件等) 不受信任的完整性级别进程是否应该能够打开一
我是一名优秀的程序员,十分优秀!