BOOST :: ASIO TCP数据库服务器

boost::asio tcp database server

本文关键字:服务器 数据库 ASIO BOOST TCP      更新时间:2023-10-16

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

客户端发送:put" index" value" - 字符串放在矢量[index]中。
客户端发送:获取"索引" - 向量[索引]发送到客户端

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

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

仍然未解决 1.能够从启动时从文件加载向量的启动内容并将其保存在退出中。

已解决的 2.将计时器放在数据库元素上:vector中字符串的寿命[index]应为30秒,如果输入的30秒内,新数据不会到达向量[index]内容应删除。

剩下的唯一问题是在退出/开始时保存/加载向量数据。由于向量仅包含100个字符串,因此我可以简单地使用FSTREAM读取/写作,但是我在触发保存方面遇到了问题。

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

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

另外,只要您在网络代码和数据库实现之间有适当的抽象,就可以将数据库调整为最合适的任何内容。如果有最大数量的条目并且它们都适合内存,那么vector都很好,而SQLITE可能是过高的。

使用redis或memcached,因为它们已经有价值的时间可以生存。两者都有C 驱动程序。