2012-10-23 97 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