Простая широковещательная библиотека / пример на C / C ++ - PullRequest
2 голосов
/ 03 мая 2011

Я собираю клиент-серверное приложение, написанное на C / C ++. Это в основном C с некоторыми функциями C ++ - я из мира C и Java и не использую много тяжелых расширенных функций языка C ++. В любом случае сервер находится на одном компьютере и выполняет различные внутренние вычисления, и несколько раз в день (в непредсказуемое время) он будет передавать информацию определенному числу клиентов (находящихся на других компьютерах), которые зарегистрировались на сервере, для слушайте такие широковещательные сообщения. Сервер должен иметь возможность осуществлять широковещательную рассылку всем зарегистрированным клиентам со 100% надежностью и очень быстро, чтобы клиенты могли обновлять свои собственные внутренние данные, чтобы отразить изменение состояния на сервере - изменение состояния, которое сервер просто транслирует им. Поскольку он должен быть надежным, он должен быть TCP / IP, а не UDP.

Это похоже на довольно стандартную архитектуру для работы в сети на C ++, но я хотел бы найти хорошую библиотеку, которая позволила бы мне сделать это легко (своего рода оболочка для библиотеки WinSock, чтобы я мог легко это делать на Windows без необходимости разбираться в специфических особенностях WinSock) и простой пример того, как можно поступить подобным образом.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

Выезд boost::asio. Их примеры доступны здесь: http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio/examples.html

Он абстрагирует большинство специфических особенностей платформы, чтобы вы могли быстро приступить к делу.

1 голос
/ 03 мая 2011

Существуют две библиотеки для сетевых коммуникаций C / C ++ из свободного и открытого мира, которые качаются - LibEvent и Boost.Asio . Используя их, вам не нужно копаться в особенностях операционной системы или конкретных API для сетевых коммуникаций. Они оба имеют хорошую документацию и набор приличных примеров .

Как примечание, даже использование TCP / IP не делает протокол связи надежным с высшей точки зрения. Чтобы обеспечить надежность, приложения обычно определяют протоколы более высокого уровня поверх TCP / IP. Эти протоколы описывают последовательность сообщений, сердцебиение, поддержку ретрансляции и так далее. Есть также надежные протоколы, построенные поверх UDP (так называемый RUDP).

Если вы чувствуете, что скорость и надежность очень важны, вы можете использовать одну из передовых технологий, таких как Tibco, LBM (Informatica / 29West) или Tervela . Все эти решения могут работать поверх различных коммуникационных протоколов, предоставляя пользователю удобный API.

0 голосов
/ 03 мая 2011

Для этого потребуется приличное количество функций C ++ (шаблоны и т. Д.), Но boost :: asio отлично и именно то, что вам нужно для этой задачи. Тем не менее, это, безусловно, потребует некоторого привыкания, так как модель программирования сильно отличается от простого C ++. На сайте есть довольно хорошая документация и множество примеров.

...