Timur
а если памяти поровну и в несколько потоков...
Отвечая на вопрос, который вы не задали. Изолят ноды - минимум 20МБ даже при пустом кеше джит, строго один поток. Если надо несколько потоков - можно прибить изоляты к тредам. (умножаем на 20МБ количество тредов)
Luсky
Inellok
А пинг какие методы есть определить? Только через os.execute и юзание утилиты?
Snusmumriken
Snusmumriken
Потому что вообще, пинг который ты имеешь ввиду — это протокол и стандарт.
А ещё куча народа его отключает во избежание icmp-потопа.
Inellok
пинг - как время движения пакета на сервер и от сервера
Inellok
в мс обычно
Snusmumriken
Лол, нет )
Inellok
просто я хочу синхронизировать часы на getTime с сервера, но ведь отправка занимает какое-то время(примерно пинг/2), поэтому я хотел это учесть
Snusmumriken
У тебя есть время отправки и приёма
Inellok
время отправки пакета? Всмысле, сколько он шёл с сервера на условный клиент?
Snusmumriken
Чел, что ты синхронизируешь и как
Inellok
У меня есть часы на сервере. И есть на клиенте. Я хочу их синхронизировать, чтобы я мог на пакетах с тем же вводом ставить timestamp'ы, понятные серверу
Inellok
Потому что если я в таймстемп для ввода буду указывать клиентское время, то это подойдёт только для определения порядка этого ввода(путём сравнения). Но если мне нужно использовать этот ввод для изменения последнего снимка мира, надо как-то определить, актуален ли он для этого последнего снимка
Snusmumriken
А подумать? )
fgntfg
Snusmumriken
Потому что вообще задача простецкая, даже выдумывать не надо
Inellok
Задача - уменьшить лаги до приемлимого минимума)
Snusmumriken
Чел.
Snusmumriken
Синхронизация времени с учётом пинга — простецкая задача.
Для которой не нужно ничего выдумывать вроде "гоняем пинг"
Inellok
Так мне пинг отуда взять? Через os.execute?
Snusmumriken
Че-е-ел ))
Snusmumriken
Для грубой прикидки хватит четырёх строчек луёвого кода.
fgntfg
Тони, думай. Если не получается, то посмотри как другие решили такую задачу
Inellok
Я смотрел api, но функций для пинга не нашлось
Snusmumriken
Я смотрел api, но функций для пинга не нашлось
local t = os.clock()
local serverTime = http.request("http://myservertime.ru")
local ping = os.clock() - t
serverTime = serverTime - ping / 2
Голову врубаем. Врубаем голову. Да-да, запрос мог обрабатываться какое-то время, но надеюсь твой сервер достаточно быстрый чтобы обрабатывать быстрее чем за пару милисекунд. И лучше таки не хттп, хттп медленное. Для охрененной точности — открой отдельный udp-порт для пропинговки и радуйся жизни.
Inellok
Пипец. Мда. Обидно. Странно я затупил.
Snusmumriken
Inellok
Ну тут не доки
Inellok
Тут я мозгом не очень умею пользоваться
Inellok
Спасибо
Inellok
Как ещё один неплохой вариант для мультиплеера(вместо авторитарного сервера) - просто пересылать сообщения от клиента к клиенту
Snusmumriken
Для прям охрененно охрененной точности, смотри:
1. Берём и такие делаем запрос на сервер со своим временем.
2. Сервер такой берёт и отправляет назад дельту между своим временем и твоим.
Урааааа!!111 Точно синхронизированное время!!11
Inellok
А эта дельта не изменяется? Код выполняется с разной скоростью, да и код разный
Inellok
это тоже время заменяет
Snusmumriken
Нет конечно, чел.
Inellok
ну со временем оно накапливается
Snusmumriken
Нет.
Snusmumriken
Дельта измеряется один раз. При всех запросах с таймингами просто берёшь своё время и прибавляешь к нему дельту. Всё. Она уже с учётом пинга.
Для пущего эффекта — несколько раз кидаешь запрос и получаешь дельту, примерно прикинув джиттер. Используешь усреднённую.
Igor
Проблемы с пониманием пространства и времени вошли в чат
Inellok
Snusmumriken
Колдунство же. Отрицательные дельты кстати тоже работают, разумеется, если твои часы спешат. И "пол пинга" учитывается автоматически кста, и входит в дельту.
Inellok
Да, реально колдунство
Inellok
То есть, в конце 00303 - время на клиенте и такое же на сервере?
Snusmumriken
Клиент отправляет своё время + дельту от сервера. Сервер принимает сообщеньку и она имеет его время.
Inellok
А что за 00009?
Snusmumriken
Время которое сообщение летело до сервера. Сколько оно летит в обратку не имеет значения.
Inellok
Типа, на него вообще пофиг, всё и без него работает?
Snusmumriken
Конечно, у сервера за это время, время изменится ровно на столько, сколько летело сообщение, и оно очевидно будет включено в дельту ))
Inellok
Первое сообщение получает в 00158 или 00167?
Snusmumriken
00158 это время на сервере в "текущий момент", таймлайн совершенно явный.
00123 это время на клиенте в "текущий момент". Допустим они расходятся. Они и будут расходиться.
Inellok
Ок, а то вдруг я что-то путаю
Snusmumriken
Сервер получит сообщение в 00167 по своему времени, и в 0132 по времени клиента. Опа, между ними разница 00033, и как раз 00009 сообщение летело.
Inellok
Но дельта должна рассчитываться у одновременных событий
Inellok
Или с учётом времени доставки пакета...
Snusmumriken
Чел. Тебе насрать на одновременность событий ))
Snusmumriken
Просто отправляй серверу с дельтой и не промахнёшься.
Snusmumriken
Вот специально для тебя копирую на ноут луажыт чтобы показать, лол кек.
Inellok
Не вдупляю чёт совсем... На математике тоже такое бывает. Я вот смотрю, вроде работает, но разум мне подсказывает, что тут что-то не так. Левшой быть сложно
Snusmumriken
Дело не в левше и не в том что "ты весь такой творческий". Думалку напрягай. И всё.
Inellok
У меня больше проблема с восприятием инфы(часто неправильным), чем с думалкой, как мне кажется
Inellok
Snusmumriken
На сервере и клиенте разное время. Ра Зно Е.
Snusmumriken
Клиент может получить время на сервере — прибавить к своему времени дельту, тогда когда его сообщение дойдёт до сервера — там как раз будет ровно это время (чуть отличаться из-за нестабильности пинга и джиттера, но это уже частности). Синхронизировано? Синхронизировано.
Snusmumriken
"Обожимой я хочу чтобы клиент и сервер начали иметь одинаковое вре-е-е-емяяя!!" — а кто будет вычислять пинг? И конечный результат будет тот же, только ещё придётся постоянно вычислять пинг.
Inellok
Разве пинг нельзя 1 раз вычислить?
Inellok
Он так сильно скачет?
Snusmumriken
Ха-ха-ха.. Сколько ты играл в игры? У тебя есть опыт лиги легенд/доты например? Или хотя бы кс? Просто физически ощущал скачки пинга?
Inellok
Да. Но мб это именно для комплексных игр
Snusmumriken
Как это может зависеть от комплексности игры?
Inellok
Короче, ладно, он скачет. А дельта не скачет. Поэтому берём дельту, чтобы снизить нагрузку?
Snusmumriken
Примерно так. Но ресинхронизировать время от времени всё таки желательно кста, если игра быстрая — пары раз в секунду хватит, заодно получишь статистику по джиттерам и качеству соединения, и безо всяких вычислений ))
Snusmumriken
Специально для тебя вот тебе мини сервис (работает пока врублен мой комп)
http://178.140.95.116:8080/deltatime?time=12345
Отправляешь на него время, он будет возвращать дельту между тобой и моим компом.
Inellok
Ааа... Я понял про дельту. Надо просто с другой стороны думать. Находим разность между двумя одинаково по скорости растущими во времени величинами, и можем потом буквально в оффлайне видеть время сервера
Inellok
Меняются только последние цифры
Snusmumriken
Время получишь например через require'socket'.gettime(), запрос типа
local time = require'socket'.gettime
local delta = require'socket.http'.request("http://178.140.95.116:8080/deltatime?time=" .. time())
Inellok
Основная часть (16530696) остаётся неизменной
Inellok
это как перевод из одной системы координат в другую
Inellok
или что-то типа того
Snusmumriken
Вот когда начнёшь получать от моего сервера ответы начинающиеся на 0.0abcd (может быть отрицательным) — ты нашёл хорошую дельту.