Обработка событий клиент / сервер: альтернативы UdpClient? - PullRequest
0 голосов
/ 26 августа 2011

Клиент-серверное приложение My Winforms использует многоадресную передачу UDP для обновления всех клиентов в режиме реального времени.Сервер отправляет события в известный приемник UDP, и каждый клиент получает их, используя экземпляры класса System.Net.Sockets.UdpClient.

Это прекрасно работает - когда это работает.У каждого клиента есть удаленный объект, для которого он выполняет свои синхронные вызовы через TCP, а UDP обрабатывает асинхронные операции, поэтому клиент остается без состояния.Но многие из наших клиентов по-разному отключают UDP - некоторые отключают многоадресную рассылку, некоторые вообще отключают UDP, некоторые отключают ее преднамеренно, другие - случайно.В итоге я занимаюсь сетевым администрированием гораздо больше, чем хотелось бы.

Другой вариант, как мне кажется, заключается в том, чтобы сервер управлял клиентскими подключениями и отправлял события через TCP, но для этого требуется сервер с состоянием и он не выглядит очень привлекательным.Есть ли лучшие альтернативы?

1 Ответ

0 голосов
/ 26 августа 2011

Вы можете попробовать использовать WCF и шаблон дизайна публикации / подписки. Я переместил приложение TCP / UDP winforms, очень похожее на то, что вы описали, в WCF с использованием привязки netTCP и широковещательной передачи UDP, чтобы клиенты могли найти сервер, как только они его нашли, они подписались, и вы используете контракты обратного вызова WCF для обновления клиентов. В случае разрыва соединения вам понадобится интеллект с обеих сторон.

Также в вашем случае, если у сервера всегда задан адрес с обратными вызовами WCF, вам не нужно использовать UDP для поиска сервера, поэтому вы можете исключить UDP и просто полагаться на netTCPBinding для отправки сообщений клиентам и наоборот .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...