Перейти к содержимому
eu_tomat

Дальность беспроводного вещания в OpenComputers

Рекомендуемые сообщения

Эта тема является продолжением решения вопроса о трудностях обмена пакетами в беспроводной сети OpenComputers. Здесь обсуждается влияние на дальность доставки пакетов не только силы сигнала и препятствий в виде блоков, но и других факторов.

 

 

В 27.12.2021 в 23:45, Disc2 сказал:

Помимо прочего у беспроводных карт есть просчет "препятсвий" при отправке сообщений - наличие каких-то блоков между отправителем и принимающим уменьшает рабочий радиус беспроводных сетевых карт.

Откуда такие сведения? Вроде нет такой физики в OpenComputers.

Изменено пользователем eu_tomat
ответвление темы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 часов назад, eu_tomat сказал:

Откуда такие сведения? Вроде нет такой физики в OpenComputers.

https://ocdoc.cil.li/item:wireless_network_card

Цитата

The hardness of blocks in the path is subtracted from the strength. Some randomness is applied to the strength.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Disc2 сказал:

The hardness of blocks in the path is subtracted from the strength. Some randomness is applied to the strength.

А как это подтвердить экспериментально? В каких случаях этот эффект проявляется, и насколько сильно?

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, eu_tomat сказал:

А как это подтвердить

Экспериментально - сложно сказать, но код такой точно есть:

https://github.com/MightyPirates/OpenComputers/blob/af2db43c53b9690fceabfb813987572bf2258db5/src/main/scala/li/cil/oc/server/network/WirelessNetwork.scala#L86

Скрытый текст

  def computeReachableFrom(endpoint: WirelessEndpoint, strength: Double) = {
    dimensions.get(dimension(endpoint)) match {
      case Some(tree) if strength > 0 =>
        val range = strength + 1
        tree.query(offset(endpoint, -range), offset(endpoint, range)).
          filter(_ != endpoint).
          map(zipWithSquaredDistance(endpoint)).
          filter(_._2 <= range * range).
          map {
          case (c, distance) => (c, Math.sqrt(distance))
        } filter isUnobstructed(endpoint, strength) map(_._1)
      case _ => Iterable.empty[WirelessEndpoint]
    }
  }

 

Так что надо изучать, как ведёт себя функция isUnobstructed.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, ProgramCrafter сказал:

надо изучать, как ведёт себя функция isUnobstructed.

Действительно, есть помеха от блоков.

 

Физика интересная. Сигнал распространяется по прямой линии в канале сечением 3x3. Суммарная помеха вычисляется из плотностей нескольких случайно выбранных блоков в этом канале. Может, например, оказаться, что всё это блоки воздуха. Или наоборот, самые плотные блоки. Любой из блоков может быть выбран повторно, что ещё сильнее увеличивает разброс средней плотности.

 

Ошибки в моём эксперименте:

  • Я выполнил единственную передачу и она оказалась успешной. Последующие могли быть и не столь удачными.
  • Я заложил камнями отрезок от компьютера до компьютера, но это не весь канал а лишь одна девятая его часть. Это снизило вероятность неудачи.
  • Я использовал обычный камень. Думаю, алмазная руда смогла бы внести более серьёзную помеху.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, eu_tomat сказал:

Действительно, есть помеха от блоков.

 

Физика интересная. Сигнал распространяется по прямой линии в канале сечением 3x3. Суммарная помеха вычисляется из плотностей нескольких случайно выбранных блоков в этом канале. Может, например, оказаться, что всё это блоки воздуха. Или наоборот, самые плотные блоки. Любой из блоков может быть выбран повторно, что ещё сильнее увеличивает разброс средней плотности.

 

Ошибки в моём эксперименте:

  • Я выполнил единственную передачу и она оказалась успешной. Последующие могли быть и не столь удачными.
  • Я заложил камнями отрезок от компьютера до компьютера, но это не весь канал а лишь одна девятая его часть. Это снизило вероятность неудачи.
  • Я использовал обычный камень. Думаю, алмазная руда смогла бы внести более серьёзную помеху.

Следовательно, если между компьютерами несколько выгруженных чанков они будут постоянно загружаться и выгружаться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, NEO сказал:

Следовательно, если между компьютерами несколько выгруженных чанков они будут постоянно загружаться и выгружаться?

Тут надо прояснить термины. Какой чанк можно считать загруженным?

 

Игрок считает загруженным тот чанк, в котором протекают какие-то игровые процессы. Требуется ли загрузка чанка именно в этом смысле, для того чтобы прочитать плотность блока? Скорее всего, нет. Тогда и выгрузка не требуется. А иначе можно было бы с помощью двух чанклодеров поддерживать активными не 18 чанков, а 38.

 

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

 

Или как оно работает в Майнкрафте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, eu_tomat сказал:

Или как оно работает в Майнкрафте?

Можно к этому еще добавить каскадную генерацию и идти валить сервера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Disc2 сказал:

добавить каскадную генерацию

Потому максимальная дальность у сетевой карты и выставлена в 400 блоков. Если вокруг и источника, и приёмника сгенерировано по 13 чанков, между ними гарантированно (или почти гарантированно) не будет новых чанков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, eu_tomat сказал:

Тут надо прояснить термины. Какой чанк можно считать загруженным?

 

Игрок считает загруженным тот чанк, в котором протекают какие-то игровые процессы. Требуется ли загрузка чанка именно в этом смысле, для того чтобы прочитать плотность блока? Скорее всего, нет. Тогда и выгрузка не требуется. А иначе можно было бы с помощью двух чанклодеров поддерживать активными не 18 чанков, а 38.

 

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

 

Или как оно работает в Майнкрафте?

ЕМНИП, world.blockExists проверяет загружен ли чанк. Так что проверка плотности осуществляется только для блоков в загруженных чанках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я провёл эксперимент. На одной линии уставил 4 компьютера.

  • Первый компьютер непрерывно рассылает широковещательные пакеты на первый порт.
  • Через десяток чанков второй компьютер также рассылает пакеты, но на второй порт.
  • Ещё чанков через 10 установлен третий компьютер. Он отображает все пойманные широковещательные пакеты. В норме он не слышит никаких пакетов, если не загрузить чанки, содержащие первый или второй компьютер.
  • Для теста ставим чанклодеры сначала к первому компьютеру, затем ко второму. На третьем компьютере следим за поступлением пакетов.
  • В чанк с первым компьютером ставим чанклодер, а на сетевой карте открываем порт с номером, например, 4.
  • В чанк с третьим компьютером ставим четвёртый компьютер и с него непрерывно рассылаем пакеты в 4 порт.

Что в результате я ожидал увидеть? Линия передачи от четвёртого компьютера к первому лежит через чанк со вторым компьютером. Рано или поздно будет запрошена плотность блока из этого чанка. И если чанк загрузится, второй компьютер возобновит рассылку пакетов на второй порт. И это можно будет увидеть на третьем компьютере. Но на нём я увидел лишь передачу с первого компьютера.

 

Вывод: Либо чанк со вторым компьютером не загрузился, либо такая загрузка чанка не приводит к возобновлению работы компьютера, либо эксперимент поставлен неверно.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, eu_tomat сказал:

Тут надо прояснить термины. Какой чанк можно считать загруженным?

 

Игрок считает загруженным тот чанк, в котором протекают какие-то игровые процессы. Требуется ли загрузка чанка именно в этом смысле, для того чтобы прочитать плотность блока? Скорее всего, нет. Тогда и выгрузка не требуется. А иначе можно было бы с помощью двух чанклодеров поддерживать активными не 18 чанков, а 38.

 

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

 

Или как оно работает в Майнкрафте?

Допустим никаких процессов не протекает, но периодическое чтение диска данный процесс требует, если не проверять на "видимость" между ЭВМ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, NEO сказал:

Допустим никаких процессов не протекает, но периодическое чтение диска данный процесс требует, если не проверять на "видимость" между ЭВМ.

Это само собой. Обмен беспроводными сообщениями требует либо перечитывания чанков с диска, либо удержания их в памяти при постоянном вещании. Беспроводные платы оказались не настолько лёгкими, как казалось ранее. Видимо, такова плата за подобие реалистичности.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, ProgramCrafter сказал:

Потому максимальная дальность у сетевой карты и выставлена в 400 блоков. Если вокруг и источника, и приёмника сгенерировано по 13 чанков, между ними гарантированно (или почти гарантированно) не будет новых чанков.

А почему между ними должно быть сгенерировано по 13 чанков?.. Откуда число "13" взялось? Или это math.ceil(400/(16*2))? Но тогда это не может быть объяснением фразы "потому и выставлена в 400 блоков"? 

Или имелось ввиду не конкретно, что 400 блоков это какое-то волшебное значение, а просто что есть лимит?

 

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

Просто робот с чанклоадером будет грузить 1-2 чанка (или Фингер его знает, как там OC-овские чанклоадеры грузят чанки),a 2 робота с сетевухами уже будут грузить 25 чанков, не считая возможного каскада. Игрок с ограничением прогрузки в 8 чанков и то только по 17 чанков генерирует за раз, хоть и зависит многое от скорости передвижения. И "полноценная" прогрузка не требуется, поскольку относительно пустые чанки без лагзаводов - не такая уж и проблема, а вот ворлдген сильно сказывается на работе сервера. Если добавить третьего робота - уже 49 чанков грузить будут. Причем, как я понял, удачная отправка сообщений вообще же не требуется, они все равно грузят чанки чисто проверкой помех между ними.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Disc2 О каких каскадах ты говоришь? Предлагаешь в чанках, загруженных с помощью беспроводной передачи, разместить дополнительные приёмники и передатчики, загружающие новые чанки?

 

Если речь идёт об этом, то для начала надо попытаться загрузить хотя бы один чанк. И не просто подгрузить его в память, а сделать его активным с игровой точки зрения. В моём эксперименте, изложенном выше, загрузка чанков не подтвердилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

@Disc2 О каких каскадах ты говоришь?

А,понял. Нет, каскадная генерация это баги кривых генераций мира и структур в модах, их конфликтов, наложения друг на друга и т.д.

https://forums.spongepowered.org/t/server-crash-for-to-much-chunk-loading-pixelmon/36297/3

Изменено пользователем Disc2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, Disc2 сказал:

каскадная генерация это баги кривых генераций мира и структур в модах, их конфликтов, наложения друг на друга и т.д.

Понятно. Это лишь косвенно относится к обсуждаемому вопросу. На публичных серверах мир обычно создан заранее в некоторых границах.

 

А учитывая, что игрок для установки передатчика и приёмника уже переместился между этими двумя чанками, то с большой вероятностью весь путь между ними уже сгенерирован, даже если не было предварительной генерации.

 

Я думаю, эта проблема преувеличена в обсуждаемом контексте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

@Disc2 О каких каскадах ты говоришь? Предлагаешь в чанках, загруженных с помощью беспроводной передачи, разместить дополнительные приёмники и передатчики, загружающие новые чанки?

 

Если речь идёт об этом, то для начала надо попытаться загрузить хотя бы один чанк. И не просто подгрузить его в память, а сделать его активным с игровой точки зрения. В моём эксперименте, изложенном выше, загрузка чанков не подтвердилась.

Нецелесообразно лишь предполагать, лучше заглянуть в код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@eu_tomat Нет, на всех серверах где играл эта проблема присутствовала.

Скрытый текст

Да, в итоге админы делают перегенерацию  основного мира, но многие другие миры не только не прегенерируют, но и делают там периодические вайпы, по очевидным причинам - игроки обносят все данжи, остальным ничего не остается, в итоге никто не играет. Более того, классическая комедия - вайп на сервере,новая сборка, игроки заходят,бегают,пытаются играть,у всех лагает,игроки кричат что "админ - помидор",админ сначала не понимает в чем виноват, раздает банхамером, потом ищет проблему - решает делать преген мира,на следующий день все играют,но игроки начинают кричать,что "админ - гондурас",админ ничего не понимает, раздает банхамером, пытается разобраться,опять ничего не понимает,опять раздает банхамером, возмущения недовольных прекращаются - админ объявляет,что проблема решена... Спустя пол года, на почти пустой сервер приходит кто-то,кто умудряется достучаться до админов, и сообщить что не генерируется одна из главных руд из одного мода, на которую зациклена половина ендгейма сборки. Админ в очередной раз заходит на сервер проверять и доказывать ошибочность заявления - вскрывает разрез чанков через set 0,видит руду,заявляет что игрок брехло, игрок заявляет что админ - Вий,и что щас поднимет ему веки. Уводит админа со спавна в чанки сгенерированные прегенератором (о чем никто в тот момент не подозревает) - и показывает что руды этой нигде нет, кроме спавна,и кусков мира где побывали первые игроки. Оказывается,что у некоторых модов конфликты с прегенератором. Сценарий повторяется по кругу, на том же проекте, и на любом другом проекте

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

17 часов назад, Disc2 сказал:

Можно к этому еще добавить каскадную генерацию и идти валить сервера.

Еще раз - 2 робота с прогрузчиками чанков,и беспроводными картами, могут ехать и генерировать огромную зону карты. С тем же успехом, прогрузчики чанков роботов могли бы грузить радиус в 6-12 чанков. Ради чего? Чтобы мало кому известная механика мода, создавала людям трудно определяемую проблему связи, в без того багнутых беспроводных картах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...