2011-03-25 62 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