c++ - boost::asio tcp 数据库服务器

标签 c++ database sqlite tcp boost-asio

我需要一些提示: 我正在编写一个 tcp 数据库服务器,它可以容纳 100 个字符串(我使用字符串 vector 来保存数据)。到目前为止,我实现的基本功能是:

客户端发送:PUT "index""value"- 字符串被放入 vector[index]。
客户端发送:GET "index"- vector[index] 被发送给客户端

我的工作基于 boost::asio 异步回显服务器示例 http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/echo/async_tcp_echo_server.cpp

现在,我想将服务器的功能扩展到:

仍未解决 1. 能够在启动时从文件中加载 vector 的起始内容并在退出时保存它。

已解决 2. 在数据库元素上放置计时器:vector[index] 中字符串的生命周期应为 30 秒,如果在输入的 30 秒内,新数据未到达 vector[index]内容应该被删除。

剩下的唯一问题是在退出/启动时保存/加载 vector 数据。由于 vector 只包含 100 个字符串,我可以使用 fstream 简单地读/写,但我在触发保存时遇到了问题。

我的异步服务器的主要功能包括:io_service.run();如何在运行服务器期间通过按键触发操作?我的第一个猜测是来自用户输入的 async_read,如 http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/chat/posix_chat_client.cpp例子。还有其他想法吗?

最佳答案

我会通过保存带有值的时间戳来实现计时器,并在查找时检查条目是否已过期。如果没有人询问条目是否仍然有效,则无需使用定时器唤醒 CPU。

此外,只要您在网络代码和数据库实现之间有一个适当的抽象,您就可以使您的数据库适应最合适的任何东西。如果存在最大条目数并且它们都适合内存,那么无论如何 vector 都可以,而 SQLite 可能有点矫枉过正。

关于c++ - boost::asio tcp 数据库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032030/

相关文章:

mysql - 在 MySQL 上加载特定 ID 范围

javascript - 我的数据库通过 Phonegap 存储在 Android 中的/data/data/package-name/app_database/file__0/*.db

python - sqlite:断言语句:获取具有最高值的名称

C++ OpenCV 源代码

c++ - 在 Linux 上启用 OpenMPI

c++ - 为什么 sizeof 适用于返回类型

java - Android SQLite游标返回33个结果,但调试仅输出17个

c++ - 为什么 std::to_string() 没有模板化?

sql - 如何在golang中使用命令执行sql文件

c# - 如何将 SQLite (SQLite.NET) 添加到我的 C# 项目中