2

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

客户端发送:PUT "index" "value" - 字符串被放入向量[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. 能够在启动时从文件加载向量的起始内容并在退出时保存。

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

剩下的唯一问题是在退出/启动时保存/加载矢量数据。由于该向量仅包含 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示例。还有其他想法吗?

4

2 回答 2

1

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

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

于 2012-10-23T16:54:06.850 回答
0

使用RedisMemcached,因为它们已经拥有宝贵的生存时间。两者都有 C++ 驱动程序。

于 2012-10-23T13:57:23.130 回答