Стратегия для одноранговых сетевых соединений TCP - PullRequest
1 голос
/ 03 сентября 2010

Сетевое приложение, которое я написал, устанавливает связь TCP с N-1 (самой) другими машинами в списке (N) машин, участвующих в системе.

При запуске приложения приложение в настоящее время выбираетСлучайное время задержки (1000-3000 мс) перед попыткой подключения к каждой из его одноранговых систем

Если машина 1 пытается подключиться к машине 2, одновременно с машиной 2 пытается подключиться к машине 1. В настоящее времяЯ просто отбрасываю оба соединения, снова выбираю случайные времена (100-500 мс) и повторяю попытки соединения.

Каждая машина в конечном итоге устанавливает соединение с любой другой машиной, и система работает, но я думал, есть лилучший подход к разрешению этой ситуации?

1 Ответ

1 голос
/ 03 сентября 2010

У вас есть много вариантов.

Обычный способ разорвать связи - использовать IP. Другими словами, если A подключается к B так же, как B подключается к A, тот, кто имеет более низкий IP, может отменить свою клиентскую сторону.

В целом, было бы лучше избегать общения каждой машины друг с другом, поскольку число соединений растет тревожно быстро. Хороший компромисс - использовать древовидную структуру. Например, двоичное дерево будет означать, что каждая машина отвечает только за подключение к двум другим и будет подключаться только к одному. Другие топологии дают другой баланс эффективности и избыточности, поэтому ознакомьтесь с соответствующей литературой по этому вопросу.

...