繁体   English   中英

Model 用于多线程/分叉服务器守护程序

[英]Model for a multithreaded/forked server daemon

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

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

想想一个设备上的某种形式的“授权”,导致另一个设备接收命令并做某事。 我不能只在设备之间发送“点对点”命令,因为所有内容都必须记录在服务器上,并且可能需要数据库查询。

我对线程/进程之间的通信感到困惑。 我预计有一个 class 用于客户端(即Device )并在每个单独的进程或线程中创建一个 object 。 我知道使用 fork() 时的命名管道和共享 memory,以及与其他线程通信的技术,但我担心同步和潜在的稳定性问题。 在我遇到这个问题之前,我对 fork 及其易用性和简单性感到兴奋。 稳定性是第一个问题。

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


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

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

更新:如果我为此使用 Boost.Asio,任何人都可以给我一个简短的解释/示例代码或指出我正确的方向吗?

你应该看看 Boost::Asio 和活动的 object 模式。 在 boost'Con 2010 上有一个关于这个主题的精彩视频/讨论,您可以在 blip.tvB 上找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM