Browse Source

修改一堆问题

alroyso 2 years ago
parent
commit
82ee6a7fa6
3 changed files with 94 additions and 18 deletions
  1. 79 14
      SProxy/CNetWork.cpp
  2. 14 3
      SProxy/CNetWork.h
  3. 1 1
      SProxy/comm.h

+ 79 - 14
SProxy/CNetWork.cpp

@@ -7,12 +7,12 @@
 
 CNetWork::CNetWork() : m_http_ret(HTTPRET::http_f)
 {
-
+	initSessionPool(100);
 }
 
 CNetWork::~CNetWork(void)
 {
-
+	DestoryOneConnSessionPool();
 }
 
 int  CNetWork::GetHttpStatus() {
@@ -142,6 +142,47 @@ void CNetWork::SetUrl(LPCSTR url)
 	m_url = url;
 }
 
+void CNetWork::initSessionPool(int szie) {
+
+
+	for (int i = 0 ; i < szie ; i++)
+	{
+		std::shared_ptr<cpr::Session> pp = std::make_shared<cpr::Session>();
+		m_session_vect.push_back(std::move(pp));
+	}
+	
+}
+
+void CNetWork::DestoryOneConnSessionPool() {
+	for (auto &conn : m_session_vect)
+	{
+		std::move(m_session_vect.front());
+	}
+}
+
+std::shared_ptr<cpr::Session> CNetWork::GetSession() {
+	std::shared_ptr<cpr::Session> pp = nullptr;
+	m_mutx.lock();
+	if (m_session_vect.size() > 0)
+	{
+		pp = m_session_vect.front();
+		m_session_vect.pop_back();
+	}
+	m_mutx.unlock();
+	/*if (pp == nullptr)
+	{
+		pp = std::make_shared<cpr::Session>();
+	}*/
+
+	return pp;
+}
+
+void CNetWork::pullSession(std::shared_ptr<cpr::Session> &p) {
+	m_mutx.lock();
+	m_session_vect.push_back(p);
+	m_mutx.unlock();
+}
+
 SStringA CNetWork::GetLastErrorA()
 {
 	return SStringA().Format("%s", m_error_msg.c_str()).GetBuffer(0);
@@ -178,7 +219,7 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 
 
 	std::string res_test = "";
-
+	auto session = GetSession();
 	int count = 3;
 	do
 	{
@@ -186,13 +227,25 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 		{
 			break;
 		}
-
+		
 		if (parame.empty())
 		{
-			r = cpr::Get(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, hander, cpr::Timeout{ 60 * 1000 });
+			session->SetHeader(hander);
+			session->SetVerifySsl(false);
+			session->SetTimeout(cpr::Timeout{TIMEOUTE});
+			session->SetUrl(s.c_str());
+			//session->SetDebugCallback()
+			r = session->Get();
+			//r = cpr::Get(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, hander, cpr::Timeout{ 60 * 1000 });
 		}
 		else {
-			r = cpr::Get(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, ps, hander, cpr::Timeout{ 60 * 1000 });
+			session->SetHeader(hander);
+			session->SetVerifySsl(false);
+			session->SetTimeout(cpr::Timeout{ TIMEOUTE });
+			session->SetUrl(s.c_str());
+			session->SetParameters(ps);
+			r = session->Get();
+			//r = cpr::Get(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, ps, hander, cpr::Timeout{ 60 * 1000 });
 		}
 		if (r.status_code == 200 || r.status_code == 201)
 		{
@@ -216,10 +269,11 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 			break;
 		}
 		count--;
-
+		Logger::getSingletonPtr()->INFO("get ÖØÊÔ" + std::to_string(count) + "´ÎÊý");
 
 	} while (res_test.empty());
 
+	pullSession(session);
 	
 	return res_test;
 }
@@ -242,7 +296,7 @@ std::string CNetWork::PostUrl(std::string path, std::vector<cpr::Pair> parame, s
 
 
 	std::string res_test = "";
-
+	auto session = GetSession();
 	int count = 3;
 	do
 	{
@@ -250,15 +304,26 @@ std::string CNetWork::PostUrl(std::string path, std::vector<cpr::Pair> parame, s
 		{
 			break;
 		}
-
+		
 		if (parame.empty())
 		{
-			r = cpr::Get(cpr::Url{ s.c_str() }, hander, cpr::VerifySsl{false}, cpr::Timeout{ 60 * 1000 });
+			//r = cpr::Get(cpr::Url{ s.c_str() }, hander, cpr::VerifySsl{false}, cpr::Timeout{ 60 * 1000 });
+			session->SetHeader(hander);
+			session->SetVerifySsl(false);
+			session->SetTimeout(cpr::Timeout{ TIMEOUTE });
+			session->SetUrl(s.c_str());
+			r = session->Get();
 		}
 		else {
-			r = cpr::Post(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, cpr::Payload{ parame.begin(),parame.end() }, hander, cpr::Timeout{ 60 * 1000 });
+			session->SetHeader(hander);
+			session->SetVerifySsl(false);
+			session->SetTimeout(cpr::Timeout{ TIMEOUTE });
+			session->SetUrl(s.c_str());
+			session->SetPayload(cpr::Payload{ parame.begin(),parame.end() });
+			r = session->Post();
+			//r = cpr::Post(cpr::Url{ s.c_str() }, cpr::VerifySsl{ false }, cpr::Payload{ parame.begin(),parame.end() }, hander, cpr::Timeout{ 60 * 1000 });
 		}
-		Logger::getSingletonPtr()->DEBUG(r.url.c_str());
+		//Logger::getSingletonPtr()->DEBUG(r.url.c_str());
 		if (r.status_code == 200 || r.status_code == 201)
 		{
 			res_test = std::move(r.text);
@@ -287,7 +352,7 @@ std::string CNetWork::PostUrl(std::string path, std::vector<cpr::Pair> parame, s
 
 
 	} while (res_test.empty());
-
+	pullSession(session);
 
 	return res_test;
 }
@@ -315,7 +380,7 @@ std::string CNetWork::Retrying(std::string path, std::vector<cpr::Parameter> par
 
 
 	} while (res_test.empty());
-
+	
 
 	return res_test;
 }

+ 14 - 3
SProxy/CNetWork.h

@@ -4,6 +4,8 @@
 #include <cpr/cpr.h>
 #include "comm.h"
 
+#define TIMEOUTE 60 * 1000
+
 class CNetWork : public IBaseCurl
 {
 public:
@@ -38,12 +40,21 @@ private:
 	void Init();
 	void UnInit();
 	std::string UpdateError(cpr::ErrorCode code,std::string msg);
-private:
 
-	std::vector<std::string> vectorBaseurl;
+	void initSessionPool(int szie);
 
-	std::unordered_map<std::string, std::string> keymap;
+	void DestoryOneConnSessionPool();
+
+	std::shared_ptr<cpr::Session> GetSession();
 
+	void pullSession(std::shared_ptr<cpr::Session> &p);
+
+private:
+	std::mutex m_mutx;
+	std::vector<std::string> vectorBaseurl;
+	std::vector<std::shared_ptr<cpr::Session>> m_session_vect;
+	std::unordered_map<std::string, std::string> keymap;
+	cpr::Session m_session;
 	std::string m_error_msg;
 
 	HTTPRET m_http_ret;

+ 1 - 1
SProxy/comm.h

@@ -21,4 +21,4 @@ constexpr auto CONNECT_NODE_MSG = L"
 constexpr auto SUEECS_NODE_MSG = L"»ñÈ¡½Úµã³É¹¦.."; 
 
 
-constexpr auto VERSION = L"1.1.5";
+constexpr auto VERSION = L"1.1.6";