Re[2]: Проблема "снежного кома"
От: Аноним  
Дата: 06.07.04 21:25
Оценка:
Здравствуйте, PK Sly, Вы писали:

PS>то есть, в любой момент времени все клиенты знают обо всех?

PS>Тогда пускай вновь подключаемому сообщается список всех остальных, а он им всем говорит о себе. сам.

Как вариант, кстати. Спасибо. Только давайте сразу введем постулат: сервер — это и клиент одновременно (P2P, я уже упоминал ). Так что по первым прикидкам придется немного усложнять алгоритм — если я все правильно понял, то подключаемый сервер в ответ на отсыл им IP клиента получает список серверов, который есть у сервера, к которому подключились? И, соответственно, продолжает рассылку этого IP клиента всем остальным серверам до тех пор, пока не исчерпается список.

Тогда рассмотрим другой вариант: пусть я — сервер А. Первое подключение идет к серверу B (не имеющему адресов других серверов сети). Примем постулат: я хочу синхронизировать список серверов так, чтобы у каждого сервера из приведенных в пример четырех (А, B, C, D) имелись адреса других 3-х серверов.

Я имею (сервер А) адреса серверов В и С. Я соединяюсь с сервером B, затем c сервером С (имеет адрес сервера D). Сервер B после этого будет знать мой адрес (сервера А) и адрес сервера С (я ему его сообщил). У сервера B в списке больше нет адресов других серверов (добавлять в мой список для обработки нечего). Далее я подключаюсь к серверу С, сообщая ему свой адрес и адрес сервера B. Он мне возвращает адрес сервера D. С сервером D ведется аналогичная работа — сообщение ему списка известных мне серверов (к данному шагу это A (я сам), B и С). Но сервер B, подключение к которому я уже обработал, не будет знать о сервере D ровным счетом ничего, т.к. на момент работы с ним я сам еще не знал о существовании сервера D. Добавлять в pending list для отсылки адрес сервера D? Но я не сохраняю информацию о тех серверах (слишком большой overhead), у кого уже есть адрес сервера D. Как следствие — имеем N overhead-пакетов, которые будут отправлены впустую... Этого хочется избежать.

PS>как вариант, из всех, кто online, можно устроить "выборы" мастера и всё делать через него.


Это сложнее, т.к. сильно увеличивает нагрузку на "мастер"-сервер. А это может быть и достаточно слабая клиентская машина.

PS>ЗЫ а почему не UDP? broadcast как раз для этих целей.


Партия сказала — надо TCP
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.