Nano Hash - криптовалюты, майнинг, программирование

Согласование общего сетевого канала в одноранговой системе

Существует ли общий или установленный алгоритм для одноранговых узлов в сети для выбора уникального «сетевого канала» (или любой другой формы полусекретного идентификатора)?

Я работаю в среде SecondLife. Я пытаюсь выяснить, как заставить множество идентичных одноранговых объектов согласовать номер «канала», который позволяет им формировать сеть, не мешая другим существующим сетям того же типа объектов.

Все объекты создаются примерно в одно и то же время и имеют доступ к (общему) системному времени.

Подходы, о которых я думал:

  1. На основе времени создания. Канал получен (по md5) из времени unix. Проблема заключается в части "примерно в одно и то же время". Они могут быть созданы прямо на пороге новой секунды.

  2. Случайное ожидание. Заставьте объекты ждать случайное количество времени и объявите (случайно сгенерированный) номер канала, выбранный первым, кто проснется. Проблема в том, что система имеет низкую степень детализации по времени, и до того, как объявление будет обработано, может проснуться более одного объекта.

  3. Объедините 1 и 2. Объявите метку времени с высоким разрешением после ожидания случайного количества и получите канал из объявленной метки времени с наименьшим значением.

Это должно быть что-то более умное, чем думали люди, чем я. Есть ли лучший способ сделать это?


Ответы:


1

Как новый объект узнает, к какой сети присоединяться (новой или существующей)? В зависимости от того, что именно вам нужно, есть несколько подходов.

Первый метод

Вы можете использовать менее точный таймер, чем каждую секунду, например, что-то вроде этого:

integer time = llGetUnixTime();
integer channel = time - (time % 1000);

Все объекты, измененные почти в одно и то же время, вероятно, будут иметь один и тот же канал в соответствии с приведенным выше кодом, хотя вы, вероятно, захотите убедиться, что время % 1000 не близко к 0 или 1000, и, возможно, использовать время % 10000 в этом случае.

Второй способ

Помимо этого, вы можете создать какой-нибудь протокол обнаружения. Например:

  1. недавно измененный объект передает приветствие на жестко запрограммированный канал управления
  2. главный сервер для каждой сети в области отвечает номером канала своей сети
  3. объект выбирает сеть, к которой он хочет присоединиться
  4. если никто не отвечает, объект становится сервером для своей сети, увеличивая канал управления на некоторое число (например, +1)
  5. если объект все равно хочет создать свою собственную сеть, он увеличивает самый высокий используемый канал на +1 и создает свой собственный канал/сеть

Комбинация

Конечно, вы можете комбинировать оба метода - используйте llGetUnixTime() для получения канала, поздоровайтесь, и если сервер ответит, станьте узлом, иначе станьте сервером. Кроме того, вы можете проверить соответствующий верхний и нижний канал, чтобы избежать наличия двух сетей из-за разницы во времени переноса объектов при повторном изменении объектов.

22.03.2009

2

Ваши объекты заменяются другим объектом? Если это так, то простым решением является указание номера канала в целочисленном параметре llRezObject. Затем измененные (дочерние) объекты могут просто использовать параметр из своих событий on_rez в качестве канала.

Например, родитель rezzer сделал бы что-то вроде этого:

integer networkchannel = 3495293;
llRezObject("myobject", rezpos, rezvel, rezrot, networkchannel);

и измененные дочерние объекты будут делать что-то вроде этого:

on_rez(integer networkchannel)
{
    llListen(networkchannel, "", NULL_KEY, "");
}
22.06.2009
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..