【发布时间】:2011-08-19 01:30:43
【问题描述】:
我正在用 C++ 开发一个连接数据库的 Linux 守护程序,它将充当某些联网控制器设备的“服务器”。它必须具有某种形式的并发性才能同时为多个设备提供服务。服务器将监听传入的连接和 fork/thread/select()/whatever 为每个连接的设备。此连接应保持打开状态,直到它断开或关闭。客户端不会是多线程的,因此它们一次可能只有一个连接。
该项目要求设备能够使用将要处理的命令(通常包括数据库查询)与“服务器”联系,然后将命令发送到另一台联网设备。数据库查询将确定要与哪些其他客户端交谈。然后我必须找到它附加到哪个进程或线程,并通过与该线程的现有连接与设备通信。
想一想一个设备上的某种形式的“授权”导致另一个设备接收命令并执行某些操作。我不能只在设备之间发送“点对点”命令,因为所有内容都必须记录在服务器上,并且可能需要数据库查询。
我对线程/进程之间的通信感到困惑。我预计有一个客户端类(即Device)并在每个单独的进程或线程中创建一个对象。我知道使用 fork() 时的命名管道和共享内存,以及与其他线程通信的技术,但我担心同步和潜在的稳定性问题。在我遇到这个问题之前,我对 fork 及其易用性和简单性感到兴奋。稳定性是第一大问题。
我这样做完全错了吗?我的描述不是很好,所以那些认为你可以提供帮助的人可能不得不先提问。也许有人刚刚完成了类似这样的构建......
对于这个问题的冗长和相当模糊的性质,我深表歉意。这更像是一个设计问题,而不是一个直接的、可回答的问题。我不确定它是属于 Programmers 还是属于 SO。如有必要,请随意移动。
感谢所有试图挽救我理智的人。
更新:如果我为此使用 Boost.Asio,谁能给我一个简短的解释/示例代码或指出正确的方向吗?
【问题讨论】:
标签: c++ linux multithreading daemon