多线程/分叉服务器守护程序的模型

时间:2011-05-05 04:43:20

标签: c++ linux multithreading daemon

我正在用C ++开发一个数据库连接的Linux守护进程,它将充当某些网络控制器设备的“服务器”。它必须具有某种形式的并发性才能同时为多个设备提供服务。服务器将监听传入的连接和fork / thread / select()/每个连接设备的任何内容。此连接应保持打开状态,直至其关闭或关闭。客户端不会是多线程的,因此它们一次只能有一个连接。

此项目要求设备能够使用将要处理的命令(通常包括数据库查询)联系“服务器”,然后将命令发送到另一个联网设备。数据库查询将确定要与哪个其他客户端进行通信。然后,我必须找到它附加到哪个进程或线程,并通过与该线程的现有连接与设备通信。

在一台设备上考虑某种形式的“授权”,导致另一台设备接收命令并执行某些操作。我不能只在设备之间发送命令“peer-to-peer”,因为必须在服务器上记录所有内容,并且可能需要进行数据库查询。

我对线程/进程之间的通信感到困惑。我期望为客户端(即Device)创建一个类,并在每个单独的进程或线程中创建一个对象。我知道命名管道&使用fork()时共享内存,以及与其他线程通信的技术,但我担心同步和潜在的稳定性问题。在我遇到这个问题之前,我对fork及其易用性和简单性感到兴奋。稳定性是首要考虑因素。

我这样做完全错了吗?我的描述并不是很好,所以那些认为你可以提供帮助的人可能首先要提问。也许有人刚刚完成了这样的建筑......


我为这个问题的长度和相当含糊的性质道歉。这更像是一个设计问题,而不是一个直接的,可回答的问题。我不确定它是属于程序员还是属于SO。如有必要,请随意移动。

感谢所有试图挽救我理智的人。

更新:如果我正在使用Boost.Asio,那么有人可以给我一个简短的解释/示例代码或者指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

你应该看一下Boost :: Asio和活动对象模式。 你可以在blip.tvB上找到关于此iCon 2010这个主题的精彩视频/谈话