управление 1000+ подключением с помощью boost в клиенте - PullRequest
0 голосов
/ 25 марта 2011

Здесь я работаю. Симулятор шлюза. Цель шлюза - соединиться с центром обработки данных и передавать потоковое видео в центр обработки данных, если этого требует центр обработки данных.

Здесь симулятор шлюза может имитировать 1000 шлюзов. Это означает, что каждый шлюз будетсвязаться с центром обработки данных. Здесь я запутался, как управлять этой большой частью сокета в шлюзе.

В c ++ select можно использовать для этой цели, демультиплексировать соединение с центром обработки данных. Так как здесь мне, возможно, придетсявыбор создания 1000 подключения не подходит.

Я выяснил, как управлять несколькими клиентами на сервере, используя метод acceptor.async, и обработчик примет это.

Но поскольку шлюз является клиентским приложением

как управлять несколькими соединениями, чтобы я мог получать запросы от центра обработки данных для каждого соединения.

Шлюз будет работать на обоих окнах Linux.

Ответы [ 3 ]

3 голосов
/ 25 марта 2011
  • Windows: WSAEventSelect
  • Linux: epoll
  • FreeBSD: kqueue
1 голос
/ 25 марта 2011

Я не уверен насчет Boost.Asio - это может быть возможно, но мне придется исследовать это. Boost.Asio, по-видимому, не имеет никакой реализации, которая вызывает WSAWaitForMultipleEvents, поэтому я не знаю, есть ли существующая поддержка для того, что вам нужно.

В Windows как минимум WSAWaitForMultipleEvents - ваш ответ. http://msdn.microsoft.com/en-us/library/ms742219(v=vs.85).aspx

1 голос
/ 25 марта 2011

Если бы решить мою проблему, я бы сначала попытался с libevent .Libevent автоматически выбирает «лучший доступный» механизм для каждой платформы, будь то epoll, или kqueue, или select, и позволяет вам сосредоточиться на том, что уникально для вашей программы.

...