CPP项目背景等待工作

CPP program background waiting for jobs

提问人:schlumpel 提问时间:5/13/2022 最后编辑:schlumpel 更新时间:5/13/2022 访问量:79

问:

我想拆分 C++ 程序的以下工作流:

Read serialized data (1 sec, which is already very fast for that size)
Search data (0.01 ms)
Return found data(0.00.. ms) Edit: found data is just a small file

显然,读取数据需要花费大部分时间。此外,正在读取的数据永远不会更改。为了加快工作流,我想读取一次数据,然后等待请求。就像 MySQL 数据库一样,它正在等待语句。或任何其他正在运行并等待执行某些操作的进程。 现在,我使用 shell 启动程序,它只会在 linux docker 容器内运行。

你会用什么方法做到这一点?

目标:程序始终在运行并等待来自另一个进程的搜索元数据(bash script?,nodejs exec 调用),然后执行搜索,然后返回数据(写入文件)

依赖项:我想在没有例如 nodejs v8 集成的情况下构建它

Boost Asio 是一个好的起点吗?我需要构建套接字服务器吗?有没有更简单的方法?

C++ 套接字输入 io asio

评论

1赞 user4581301 5/13/2022
您的问题表明,但未明确说明序列化数据可能不是本地文件,而是从网络连接读取的。中方能否确认?
0赞 Ted Lyngmo 5/13/2022
“正在读取的数据永远不会改变”——但它似乎是相当大的数据块。如果它永远不会改变,为什么要一遍又一遍地发送它?
0赞 schlumpel 5/13/2022
是的,你是对的,数据是本地序列化文件。因为它是一大块数据,我不想在每次启动程序时一次又一次地加载它。我想让程序保持运行,等待请求。就像加载数据后的 while(1=1) 循环一样。
0赞 schlumpel 5/13/2022
编辑了问题:通过返回找到的数据,我的意思是像一小块加载的数据一样返回。只是一个小文件。这太令人困惑了,对不起!

答:

0赞 Joseph Larson 5/13/2022 #1

这是非常基于意见的。

我会把程序变成一个REST服务器。不过,我讨厌boost,并推荐Poco::Net。如果您想查看示例实现:

[电子邮件保护]:jplflyer/ShowLib.git

再看看 RESTServer 类。

我使用JSON来传递消息。它已成为行业标准。

评论

0赞 schlumpel 5/13/2022
当然,这是基于意见的,这就是为什么我对你的意见非常感兴趣:-)谢谢你的回答!就目前而言,我使用过的所有REST服务器都与Web通信。我的程序将只接收来自本地系统的请求。这些信息会改变你的建议吗?
0赞 Joseph Larson 5/13/2022
如果你只想加载一次数据,那么你的程序需要跟上内存中的数据,这意味着你需要某种方式来与它通信。REST 意味着您不是自己编写套接字代码。我认为编码比你可能做的任何事情都容易得多。
0赞 schlumpel 5/16/2022
在做了更多的研究之后,我认为共享内存IPC是我正在寻找的。
0赞 DailyLearner 5/13/2022 #2

我曾用于网络通信,它是一个非常好的库,有很好的文档和示例代码。Boost.ASIO

但 Boost 是一个巨大的库。一个好处是你可以把它编译成一个独立的库,而不需要太多的boost头。在这里看看如何编译为独立库。Boost.ASIOBoost.ASIO