Ver código fonte

服务器增加定期清理数据库

zhangyang 6 anos atrás
pai
commit
7c8b3c5790

BIN
bin/x64/Release/lewaimai_pos_windows_server_linux/lewaimai_pos_windows_server_linux


+ 23 - 6
lewaimai_pos_windows_server/network/CServer.cpp

@@ -54,6 +54,13 @@ void CServer::Init()
 		t.detach();
 	}
 
+	//开一个线程,每隔30分钟清理一次过期的消息
+	for (int i = 0; i < 1; i++)
+	{
+		std::thread t(&CServer::HandleCleanupDueMessage, this);
+		t.detach();
+	}
+
 	//开始异步执行
 	io_context_.run();
 }
@@ -235,9 +242,7 @@ void CServer::HandleOfflineMessage()
 					bool ret = session->send_message(data);
 					if (ret == false)
 					{
-						//发送失败,把数据写会数据库,等下次发送
-						AddMessageToDB(username, due_time, data);
-
+						//发送失败,等下次发送
 						break;
 					}
 
@@ -401,8 +406,6 @@ void CServer::ReceiveMNSMessage()
 		m_queue_mutex.lock();
 		m_message_queue.push(newMessage);
 		m_queue_mutex.unlock();
-
-		//LOG_INFO("push message to queue!");
     }
 }
 
@@ -465,6 +468,20 @@ void CServer::SendMessageToClient()
 				LOG_INFO("send to client success, username:" << username.c_str());
 			}
 		}
+	}	
+}
+
+/*
+ *每30分钟清理一次数据库
+ **/
+void CServer::HandleCleanupDueMessage()
+{
+	while (true)
+	{
+		std::string curTime = CLewaimaiTime::DatetimeToString(time(NULL));
+		std::string sql = "DELETE FROM pos_message WHERE due_time <= '" + curTime + "';";
+		sqlite3_exec(m_db, sql.c_str(), 0, 0, 0);
+
+		CSystem::my_sleep(60 * 30);
 	}
-	
 }

+ 2 - 0
lewaimai_pos_windows_server/network/CServer.h

@@ -36,6 +36,8 @@ public:
 
 	void HandleOfflineMessage();
 
+	void HandleCleanupDueMessage();
+
 private:
     void start_accept();