2011-03-25 88 views
0

這裏我工作網關模擬器的目的是爲了連接數據中心和流數據中心,如果數據中心要求它。使用客戶端升級管理1000+連接

這裏的網關模擬器可以模擬1000個網關,也就是說每個網關都會連接到數據中心。在這裏我很困惑如何在網關中管理這麼多的套接字。

在C++ select中可以用於這個目的,請用數據中心解複用連接。因爲在這裏我可能不得不創建1000連接select是不合適的。

我想通過使用acceptor.async方法來管理服務器中的多個客戶端,並且處理程序將採用該方法。

但由於網關是客戶端應用程序

如何管理多個連接,這樣我可以從數據中心爲每個連接請求。

網關將運行在Linux上的兩個窗口。

回答

1

如果它是我要解決的問題,我會先嚐試libevent。 Libevent自動爲每個平臺選擇「最佳可用」機制,無論是epoll還是kqueueselect,並且允許您專注於程序的獨特性。

+0

我想libevent不能在windows上工作。 – 2011-03-25 10:26:20

+0

@chris_vr,再次猜測:)「Libevent應該在Linux,* BSD,Mac OS X,Solaris和Windows上編譯。」無可否認,最後提到的Windows更新日誌條目有點陳舊,但它被廣告宣傳起作用。 – sarnold 2011-03-25 10:32:59

+0

是的正確的libevent在windows上工作。我們不能使用boost來實現epoll。我不知道libevent lib的問題。 – 2011-03-25 10:39:38

3
  • 的Windows:WSAEventSelect
  • 的Linux:epoll
  • FreeBSD的:kqueue
+0

plz。告訴我使用boost的步驟。如果客戶端100與同一服務器(數據中心)連接,如何解複用1000連接。 – 2011-03-25 10:24:14

+0

這似乎對於Linux和Windows我都需要針對這種情況採取不同的策略。我正確嗎? – 2011-03-25 10:44:54

+0

@Chris_vr:如果您使用更有效的套接字管理方式,Linux和Windows都不會有任何處理1000個連接的問題。我不知道boost :: asio使用哪種套接字通知機制 - 但是如果正確使用,我提到的三種機制應該不會遇到任何處理1000個連接的問題。 – Erik 2011-03-25 10:47:52

1

我不確定有關Boost.Asio - 這可能是可能的,但我必須對它進行研究。 Boost.Asio似乎沒有任何調用WSAWaitForMultipleEvents的實現,所以我不知道現在對您需要的支持。

至少在Windows中,WSAWaitForMultipleEvents是您的答案。 http://msdn.microsoft.com/en-us/library/ms742219(v=vs.85).aspx

+0

似乎對於linux和windows我都需要針對這種情況採取不同的策略。我正確嗎? – 2011-03-25 10:43:31

+0

你所建議的是重疊的I/O權 – 2011-03-25 10:48:13

+0

重疊的IO絕對是性能最好的方法,但你可以使用WSAWaitForMultipleEvents - 你可以派發大量的工作線程來處理活動連接。 – 2011-03-25 11:19:31