Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » MMO Space c 30K пользователей. | страница 2
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 2 из 2
На страницу: Пред.  1, 2 | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «MMO Space c 30K пользователей.»
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Sh.Tac. :
допустим 100 + 100 это примерно 240 входящих на клиент датаграмм в секунду по полкило кажная

Вау!
ИМХО, искать другую структуру передаваемых данных. Слишком резкое возрастание прокачиваемого траффика от кол-ва пользователей.
Конечно, это только со стороны сервера, хотя как посмотреть... игрокам нужно отображение других игроков. Но каждого с каждым - это всё же перебор с большим отрывом...

добавлено спустя 2 минуты:
С двадцатой стороны - при необходимости можно наверное как-то распределённую систему принятия данных организовать, гейты... 1мбод - всё же для сервера не слишком толстый канал, можно и 10мбод...
Но 30К...
_________________
Трещит земля как пустой орех
Как щепка трещит броня

Последний раз редактировалось: Guest (04:26 18-08-2009), всего редактировалось 1 раз
    Добавлено: 04:26 18-08-2009   
VBKesha
 817 EGP


Рейтинг канала: 3(31)
Репутация: 132
Сообщения: 3330
Откуда: обл.Брянская г. Трубчевск
Зарегистрирован: 07.12.2005
Хм а может поделить на зоны....
Тоесть в
1) Объект пределах досигаемости воздействия игроком сервер передаёт данные раз в Х
2) Объект в зоне которая может быстро стать зоной досигаемости передаём в X/1.5
3) объект в зоне видимости но дальще второй зоны пердаём X/2
4) объект в зоне видимости но ещё дальше чем 3 передаём в X/3
По идее это может дать неплохой разгруз без явных последствий.
    Добавлено: 09:07 18-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Все проще... Итак, общий вид пакета:
BYTE PacketId
[WORD PacketSize]
DATA PacketData

Размер пакета указывается только если пакет динамической длинны.

Далее, По поводу положений и прочей ерундистики:
Положение корабля игрока - float'ы, а вот других игроков - Word. Поясняю:
Такой девайс как радар будет? У него максимальный "взгляд" будет? Вот внутри него с точность в 65536 по каждой из осей - достаточно.
Итого:
4 Байта ID + 6 Байт Позишн + 3 байта Ориентация (360 переводим в 256 и 3 оси. Достаточно для отображения. Остальное зашлифуем кубическии сплайнами) итого 13 байт на пользователя.

Итого:
Из 512 байт (так как в 576 - 64 это IP и UDP/TCP заголовок, если кто не знал):
18 байт на околовсяческое
494 на данные, что равносильно: 38 пользователям, не считая себя самого.

добавлено спустя 1 минуту:
То есть без разбиения пакетов мы можем видеть 38 (округлим до 35) других корабликов. Очень неплохо ИМХО.

добавлено спустя 2 минуты:
Да, не забываем про выстелы, (вектор есть, есть скорость начальная. Все) и ракеты (сиречь АИ корабли)
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (12:33 18-08-2009), всего редактировалось 2 раз(а)
    Добавлено: 12:33 18-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Тут подумал... Предлагаю систематезировать данные... У нас для каждого объекта есть 2 набора данных: В Пространстве CPU и в пространстве GPU (будем их называть как CPU и GPU).

Итак, пробуем систематизировать...
Объект: Движущееся тело в космосе
Свойства:
X, Y, Z : Float (Возможно Extended) GPU
Vx, Vy, Vz : Float GPU
Теперь что делать тут: Или сразу переходить на Силу (ИМХО неверно) или на Импульс (Тогда можно просчитывать столкновения).
Если на импульсы, то:
Ix Iy Iz : Float (Возможно Extended) GPU
И сразу:
dI : Float (Возможно Extended) GPU - Мощность двигателя. Грубо говоря "Количество импульса, генерируемое за 1 такт".
+ 3 Угла. (Как назвать-то) GPU
R : Float - Радиус сферы корабля.

Теоретически этого хватит для просчета всего, чего только надо. Ну на первых порах. Потом R может замениться на геометрию корабля для просчета столкновений/попаданий
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 16:23 18-08-2009   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Guest :
1мбод - всё же для сервера не слишком толстый канал

это, напомню, для одного клиента
сервер размножает пакеты для кажного из них, следовательно надо слегка домножить на 200 чтобы оценить исходящий трафик Улыбка

теоретически есть возможность разослать одну и туже датаграмму нескольким адресатам пока TTL позволяет
практически так никто не делает

VBKesha :
может поделить на зоны

мысля здравая

тока надо ограничить скорость, а то всегда может найтись такая скорость когда ты вроде бы в самой дальней зоне, а в следующий миг уже рядом Улыбка

Warstone :
Размер пакета указывается только если пакет динамической длинны

аллокации памяти на приёме и при отправке пакета... - поубывав б Гы-гы

Цитата:
По поводу положений и прочей ерундистики

присланный кватернион позволяет элегантно сделать slerp подобно параллельному переносу координат

Цитата:
64 это IP и UDP/TCP заголовок, если кто не знал

это максимум в теории

обычно совместный заголовок IP/UDP составляет 24 байта EDIT: (ч0рд... это псевдозаголовок, ещё нуна 8 байт на порты и контрольные суммы)
но закладываться на это дело понятно не стоит
так что истина где-то посередине Улыбка

Цитата:
не забываем про выстелы

это вообще отдельная песня, с системой движения я бы не смешивал
если честно я вообще пока не понимаю как можно послать выстрел по UDP? Совсем запутался...

он же может лекго тю-тю или придти пару раз, но вот в кваке это как-то сделано, есть повод поинтересоваться
_________________
This is what you get ...
(c) Radiohead

Последний раз редактировалось: Sh.Tac. (00:02 19-08-2009), всего редактировалось 1 раз
    Добавлено: 23:44 18-08-2009   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Sh.Tac. :
он же может лекго тю-тю или придти пару раз

Дык метку времени ещё никто не отменял. Тю-тю может, а два раза - найн.
_________________
Трещит земля как пустой орех
Как щепка трещит броня

Последний раз редактировалось: Guest (04:42 19-08-2009), всего редактировалось 1 раз
    Добавлено: 04:42 19-08-2009   
VBKesha
 817 EGP


Рейтинг канала: 3(31)
Репутация: 132
Сообщения: 3330
Откуда: обл.Брянская г. Трубчевск
Зарегистрирован: 07.12.2005
Sh.Tac. :
тока надо ограничить скорость, а то всегда может найтись такая скорость когда ты вроде бы в самой дальней зоне, а в следующий миг уже рядом Улыбка

Можно попробовать расчитывать это на сервере, учитывая скорость и вектор движения этого шумахера.
    Добавлено: 08:35 19-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Sh.Tac. :
аллокации памяти на приёме и при отправке пакета... - поубывав б
А если еще раз подумать, то будет ясно что больше 64Кб пакет быть не может. Вопрос сколько аллокировать все еще стоит?
Sh.Tac. :
это максимум в теории
RFC791 (Протокол IP):
Цитата:
IHL (длина Internet заголовка) 4 бита
Длина Internet заголовка измеряется в словах по 32 бита каждый и указывает на начало поля данных. Заметим, что корректный заголовок может иметь минимальный размер 5 слов.
5 * 4 = 20 байт минимум в заголовке IP (реально - 32)
RFC768 (Протокол UDP): Заголовок 8 байт.
Итого: 28 - 40 байт это заголовок.
Согласен, я спутал с TCP заголовком. Он еще 32 байта.
Sh.Tac. :
присланный кватернион позволяет элегантно сделать slerp
Кстати, дайте что-нить почитать про кватернион, а то я все как-то больше в векторах и матрицах оперировал.

Но по существу, предложенный мной вариант кодирования информации о пользователи подходит?
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (09:36 19-08-2009), всего редактировалось 1 раз
    Добавлено: 09:35 19-08-2009   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Guest :
Дык метку времени ещё никто не отменял.

чего-то напряжно как-то хранить ещё историю недавно пришедших отметок для кажного клееента Улыбка

VBKesha :
расчитывать это на сервере, учитывая скорость и вектор движения этого шумахера.

есть смысл вообще не передавать смещения которые, скажем, меньше текущего расстояния в const раз

Warstone :
предложенный мной вариант кодирования информации о пользователи подходит?

для 2d отлично подходит

Цитата:
дайте что-нить почитать про кватернион

читать можно очень долго, разные источники
например
http://www.gamedev.ru/articles/?id=30129

я читать начал давно и даже пользоваться ими, а более-менее осознал только вот-вот Улыбка

вкратце кватернион хранит ось и угол поворота вокруг этой оси
произвольный разворот текущей оси достигается тупо умножением на другой кватернион
есть возможность интерполировать вращения и получать матрицу 3х3

Цитата:
А если еще раз подумать, то будет ясно что больше 64Кб пакет быть не может. Вопрос сколько аллокировать все еще стоит?

э-м-м-м... всегда работать со структурой в 64К на один пакет? Подозрение.
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 23:32 19-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Sh.Tac. :
э-м-м-м... всегда работать со структурой в 64К на один пакет?
Для одного пакета (имеется в виду игрового) всегда достаточно 64Кб. То, что мы задаем размер пакета 2-мя байтами гарантирует нам тот факт, что пакет больше 65536 байт быть не может. Если пакет фиксированной длинны, практика показывает, что фиксированных пакетов больше 1Кб размером не бывает. Если-же мы говорим о приеме, то тут есть некоторый прикол: Смотря как принимать. Если доверять системному буферу, то всегда читаем столько, сколько нам осталось до 64Кб. Это гарантирует то, что мы никогда не нарвемся на ситуацию что буфер загружен полностью, но пакет принят не до конца. Если-же не доверять системному буферу (ну не совсем доверять), то размер буфера должен быть 64Кб + размер системного буфера. Тогда мы в любом случае или получим пакет после чтения или не превысим размер буфера.

Да, вся вышеназванная логика относится скорее к TCP протоколу, который является поточным. UDP протокол проще и сложнее. В нем нельзя делать пакет больше 512 (давайте на этот размер заложимся) байт и тогда в пакете совершенно не надо держать его размер так как это уже лежит в заголовке. Тогда все гораздо проще: Мы или приняли пакет или нет. И тут размер всегда будет 576 (с заголовками) байт.

А нельзя, потому что иначе пакет будет биться и возможен неприход одной из частей пакета и, как результат, отвергание всего пакета еще ОС, в этом случае мы просто теряем часть удачно пришедшего пакета. Для минимизации такой вещи - UDP пакеты должны быть не разбиваемыми, как следствие 576 байт.

добавлено спустя 7 минут:
Sh.Tac. :
для 2d отлично подходит
А для 3д? Может я и не прав насчет углов, но расстояние точно надо пересчитывать от наблюдателя (читать как от корабля). Тогда в любом случае будут минимальны погрешности. Хотя если брать 64К кликов по радару, то эти погрешности невидно. Если очень хочется, давайте возьмем 3 байта. Зернистость околорадарного пространства тогда будет 16М. Можно взять не 16Бит, а 18Бит (+1 байт), тогда зернистость будет 256К, а размер пакета увеличится ненамного.

добавлено спустя 3 минуты:
Sh.Tac. :
читать можно очень долго, разные источники
Гм... Достаточно было сказать что это вектор и вращение по его оси... Только не понятно как 0 угол отмеряется.
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (00:29 20-08-2009), всего редактировалось 4 раз(а)
    Добавлено: 00:29 20-08-2009   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Warstone :
расстояние точно надо пересчитывать от наблюдателя (читать как от корабля). Тогда в любом случае будут минимальны погрешности.

т.е. кажный игрок находится в (0,0,0) собственной системы координат?
без глобальной системы координат?
это как-то очень смело в духе ОТО Гы-гы

Цитата:
если брать 64К кликов по радару

вот радар меня и смутил, это 2d радар?
а что будет, если смотреть невооружённым глазом из кокпита?


вообщё всё как-то очень тухло Расстроен

впору задуматься о том, что бы тактическая информация, передавалась по UDP peer-to-peer...

валидация должна производиться подсчётом голосов, если много клиентов сказали, - "не верю, ты читер", такой читер отключается от "кластера", и соответствующая жалоба шлётся на сервер, чтобы он больше его не авторизовывал Ой, не могу!..
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 01:17 20-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Sh.Tac. :
т.е. кажный игрок находится в (0,0,0) собственной системы координат?
Нет, все находятся в своих координатах...
Задача: Минимизировать данные, передаваемые по сети.
Дано: Надо передать координаты и направление всех кораблей в области видимости корабля (области видимости радара)
Допустим: Будем передавать не абсолютные координаты, а относительные. Центром координат в этом случае будет КА игрока. Тогда максимальное расстояние от КА до цели будет фиксировано (Расстоянием видимости радара), тогда разумно разбить это расстояние на n одинаковых отрезков по каждой из осей. Тогда разрешающей способностью передачи данных будет шаг, или видимость радара / n.
Заключение из вышесказанного: Фактически мы 1 вектор разложили на 2, зная что из 2-х последних векторов 1 - вектор положения КА игрока относительно начала координат, а 2-й вектор - вектор положения объекта наблюдения относительно КА игрока. Таким образом число n (2-й вектор) будет сравнительно небольшим (сравнительно с 1-м) и этим мы и воспользуемся. Для этого это n и введено. Я считаю, что будет достаточно точно передаваться местоположение объекта наблюдения, если n=65536 (2 байта).
Sh.Tac. :
вот радар меня и смутил, это 2d радар?
Это 3д радар. А вообще все вышесказанное можно отскалить как на 2д так и на 3д.
Sh.Tac. :
впору задуматься о том, что бы тактическая информация, передавалась по UDP peer-to-peer...
Вы даже не представляете геморой. Почему 30% пользователей имеют LowID в еМулах? Да потому что они сидят за фаерволлами. Фактически вы этих 30% пользователей отсекаете. вот этой фразой. Забудте как страшный сон. Раз и на всегда.
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 01:33 20-08-2009   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
Warstone :
Гм... Достаточно было сказать что это вектор и вращение по его оси... Только не понятно как 0 угол отмеряется.

А что именно непонятно? Там не угол, а направление вектора.
[0,0,0,1] - нулевой q.
[0.5,0,0,0.5] - поворот вокруг оси х относительно предыдущего состояния.
Как именно повёрнут нод изначально - зависит от способа импортирования в приложение.
А дальше - трансформация может быть любой...

добавлено спустя 1 минуту:
Warstone :
Допустим: Будем передавать не абсолютные координаты, а относительные.

Минус такого решения - при пропущенном пакете произойдёт рассинхронизация положения на сервере и клиенте - через один пакет сдвиг будет уже не торт.
_________________
Трещит земля как пустой орех
Как щепка трещит броня

Последний раз редактировалось: Guest (11:51 20-08-2009), всего редактировалось 1 раз
    Добавлено: 11:51 20-08-2009   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Guest :
Минус такого решения - при пропущенном пакете произойдёт рассинхронизация положения на сервере и клиенте - через один пакет сдвиг будет уже не торт.
Торт, если на клиенте делать обратную процедуру и в пакете посылать положения объекта наблюдения и положение КА. Тогда рывка не будет, а если и будет, то сплайны "замажут" Улыбка)
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (13:40 20-08-2009), всего редактировалось 1 раз
    Добавлено: 13:40 20-08-2009   
Канал Игры Мечты: «MMO Space c 30K пользователей.»
На страницу: Пред.  1, 2 | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Граждане! не верьте ему! он не 027 вовсе - он 028!! (duch)

  » MMO Space c 30K пользователей. | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18