2012-10-23 63 views
2

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

客户端发送:PUT“index”“value” - 将字符串放入向量[index]中。
客户端发送:GET“指标” - 矢量[索引]被发送到客户端

我根据我的工作升压:: ASIO异步回声服务器的例子 http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/echo/async_tcp_echo_server.cpp

现在,我想扩展功能服务器的地址为:

仍未解决 1.能够在启动时从文件加载vector的起始内容并将其保存在exit上。

解决上数据库元素 2.将定时器:在载体[指数]串的寿命应为30秒,如果内输入的30秒,新数据不会到达矢量[索引]的含量应擦除。

剩下的唯一问题是在退出/开始时保存/加载矢量数据。由于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示例。任何其他想法?

+1

检查boost :: chrono - 如果您想避免ntp /夏令时/其他时钟更改出现问题,最好不要使用挂钟时间。 steady_clock和steady_timer会做你想做的。你可能想看看boost的序列化,以保存/加载,但可能会矫枉过正。 – sje397

回答

0

使用RedisMemcached因为他们已经有价值的时间了。两者都有C++驱动程序。

1

我会通过使用该值保存时间戳来实现计时器,并在查找时检查该条目是否已过期。如果没有人询问输入是否仍然有效,则不需要用定时器唤醒CPU。另外,只要你在网络代码和数据库实现之间有一个适当的抽象,你就可以使你的数据库适应任何最合适的数据库。如果有最大数量的条目并且它们都适合内存,那么通过一切手段vector都可以,SQLite可能是矫枉过正的。

+0

好吧,我已经改变了数据库矢量来保存字符串值和时间戳的结构。即将到期的参赛作品现在运作良好。谢谢! – serdel