|
|
|
Канал Игры Мечты: «Ищу программеров, сидящих на космосе.» |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
да у меня была предельно "гениальная" идея с "Монте-Карло", сервер постоянно пускает ракеты или гранаты, потом, если чувак вдруг нажал кнопку, то для него уже есть посчитанная траектория которая потом органично склеивается с той прямой линией, что рисует клеент пока не придёт ответ
минусы, распадающиеся боеголовки создают лавину расчётов, коллизии между запускаемыми объектами желательно выключать и тогда низзя противоракеты
зато как раз поле деятельности для GPU ибо много ненужных однотипных расчётов
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
На самом деле все просто - вводится квантование времени и ракета способна и на клиенте понимать куда она летит и как она это делает. Дальше где-то раза 2 в секунду просто положение пересылать и все.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Варсик : |
способна и на клиенте понимать
|
это понимание может отличаться от серверного
Цитата: |
раза 2 в секунду просто положение пересылать
|
откуда куда? и что делать с "пониманием" тогда, если оно не соответствует?
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Если понимание на клиенте и на сервере разное в зависимости от обстановки то программер - дибил.
Если положение отличается, то прав сервер. Практика подсказывает что отличаться положение будет не сильно и можно просто перенести в правильное место ракету. Если местоположение отличается сильно, то программер - дибил.
добавлено спустя 7 минут:
Только что понял что TCP'шный подход не применим для UDP. Алгоритм работы UDP - это постоянный посыл раз в тик определенных данных через датаграммы. И если TCP это поток, то UDP это ни раз не поток. В результате чего появилась такая мысль:
1) UDP пакет всегда регенерируется перед началом посылки спец кодом.
2) UDP пакет имеет 3 состояния: Посылать всегда, Посылать Х раз (в большинстве случаев - 1), Не посылать.
3) На этапе отработки тика - сам UDP клиент должен проходится по всем пакетам, проверять - что из них надо отослать и - отсылать.
добавлено спустя 10 минут:
На первых порах захосчу на гуглькоде... Дальше - будем посмотреть.
http://code.google.com/p/jasg
Сейчас заливается клиент. В основном там код.
JASG - Just Another Space Game
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (02:30 20-12-2013), всего редактировалось 2 раз(а) |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
глянул код, вместо битовых операций можно юзать BitConverter когда низзя unsafe
ТСР хоть прально сразу с перекладыванием "хвостиков", а то многие игнорят этот момент
а UDP зачем? там к нему ещё пробитие NAT песать придётся по-любому
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Закоммител половину UDP (отсылающую). Пришлось генерить отдельный тред для отсылки, так как мне плевать как там юнити тормозит, но некоторые пакеты с определенной частотой слать надо.
> а UDP зачем? там к нему ещё пробитие NAT песать придётся по-любому
Читайте ветку сначала:
- TCP - управляющий протокол для сервера игровой логики.
- UDP - протокол для физического мира. Положение, вектор скорости и прочая.
Вообще задумывается как: Есть 2 типа серверов. TCP - для логике. Код писан на чем угодно, вплоть до любимого Перла. UDP - для просчета столкновений, позиций и т.д. Пишется на C(C++) с CUDA. И он должен быть быстрым. ОЧЕНЬ быстрым.
А насчет NAT'а - вы ошибаетесь. Там немного по другому. Суть в том, что когда ты с клиента пинаешь UDP пакет, то NAT сам считает что с той стороны тебе прилетит на порт отправителя пакет. Если пакет не прилетает в течении Х секунд, то... Канал грохается... Больше прочесть можно в гугле. (Я сам плохо представляю как это работает до конца, но это работает, иначе-бы CS по сетке не пахал. Он UDP юзает).
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Варсик : |
когда ты с клиента пинаешь UDP пакет
|
а что такого неважного можно послать с клеента?
_________________ This is what you get ...
(c) Radiohead |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Sh.Tac. : |
Варсик : |
когда ты с клиента пинаешь UDP пакет
|
а что такого неважного можно послать с клеента?
|
Типа латентность UDP меньше, потому что как пакет долетел - можно сразу обрабатывать, а не пока там еще TCP-шные подтверждения доставки пройдут.. Только дублировать по TCP всё равно придется, т.к. UDP без гарантии доставки.
Варсик : |
Вообще задумывается как: Есть 2 типа серверов. TCP - для логике. Код писан на чем угодно, вплоть до любимого Перла. UDP - для просчета столкновений, позиций и т.д. Пишется на C(C++) с CUDA. И он должен быть быстрым. ОЧЕНЬ быстрым.
|
Мне тут подумалось, что интероп между этими серверами может съесть весь желаемый выигрыш. Либо это должен быть один процесс с хорошо продуманным и очень легковесным взаимодействием между разнородными частями.
Лично по моему опыту - плюсы проигрывают C#. Но возможно это была специфика задачи, а может я на плюсах писать не умею, ибо переносил именно ради проверки с шарпа и без того оптимизированный код практически дословно. Не ощутив прироста даже SSE добавлял. Софтварный рендер это был.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший
Последний раз редактировалось: Olorin (03:17 21-12-2013), всего редактировалось 1 раз |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
а что такого неважного можно послать с клеента?
|
Ну почитай темку... Ну пожалста. Текущий пользовательский ввод.
Про UDP имеет смысл думать так: "Если канал нормальный - сообщение дойдет". Ну а если он не нормальный, то ты все-равно не поиграешь.
добавлено спустя 3 минуты:
Olorin : |
Только дублировать по TCP всё равно придется
|
Нет, если важное посылать по TCP а "не очень" - по UDP.
Olorin : |
Мне тут подумалось
|
Рад за вас. Но в данном случае вы не совсем правы... Пример: Фит корабля и его "параметры" рассчитывает TCP сервер. Как только вы вылетели из станции - ваши ХП считает UDP сервер. На ваш вылет серверу надо пульнуть одно сообщение. И между TCP и UDP серверами конечно есть связь и она конечно TCP'шная, так как физически это или один и тот-же сервер или они стоят в одной полке.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (03:17 21-12-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Варсик : |
Текущий пользовательский ввод
|
ввод терять низзя, придётся городить свой RUDP, может выйти хуже TCP
второй момент это идентификация юзера, вот пришёл клеентский UDP пакет, от кого он? просто слать айдишник легко подделывается
Olorin : |
что интероп между этими серверами может съесть весь желаемый выигрыш
|
нормальный сервер это куча процессов, связанных между собой по ТСР для горизонтального масштабирования, просто надо понимать, где игрок может подождать (покупка, начисление ачивки и т.п.), а где нет
я слыхал про системы где даж kill предсказывался, и бывало забавно, откат, последующий оживляж и всё такое, мне кажется тут игрок мог бы и подождать
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
второй момент это идентификация юзера, вот пришёл клеентский UDP пакет, от кого он? просто слать айдишник легко подделывается
|
TCP так-же подделывается. Вообще - RemoteIP + RemotePort + Timestamp внутри пакета.
добавлено спустя 1 минуту:
Sh.Tac. : |
ввод терять низзя, придётся городить свой RUDP, может выйти хуже TCP
|
Если пакет потерялся - у пользователя плохой нет и он все-равно не поиграет.
Sh.Tac. : |
нормальный сервер это куча процессов
|
Садись два. Нормальный сервер - это количество потоков = количеству ядер.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (14:59 21-12-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Цитата: |
Вообще - RemoteIP + RemotePort + Timestamp внутри пакета
|
ну дык NAT произвольно может менять порт для UDP
Цитата: |
Если пакет потерялся - у пользователя плохой нет и он все-равно не поиграет
|
если я хотел пальнуть ракету или ловушку, а пакет не дошёл и не применился, то о каком тогда предикшне может вообще идти речь?
Цитата: |
Нормальный сервер - это количество потоков = количеству ядер
|
такое можно тока вертикально масштабировать, что дороже обычно
и походу тебе неизвестно понятие надёжности, что будет если один тред закрешится?
много процессов это UNIX way, там даже треды не сразу появились, а потом их прикрутили через LWP, для серверов лучче может быть.. тока JVM натянутая на цельный кластер пожалуй
добавлено спустя 31 минуту:
З.Ы. но я не настаиваю, например есть реально очень продвинутые чуваки которые хоть и мыслят в мастдайном стиле, но это ничему не противоречит, у них хорошие игры и надёжные сервера
http://dtf.ru/forum/flat.php?id=23365&page=1&page_size=20
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (16:19 21-12-2013), всего редактировалось 1 раз |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
сли я хотел пальнуть ракету или ловушку, а пакет не дошёл и не применился, то о каком тогда предикшне может вообще идти речь?
|
То у тебя проблемы на сети и иди лечи их. Этот подход оправдан. Примеры: Вешенная популярность разного рода шутеров. Батлы, КС и прочие вещи работают по UDP. Это так. Даже стратегии типа Генералов (я просто новее не смотрел) работают по UDP
добавлено спустя 1 минуту:
Sh.Tac. : |
много процессов это UNIX way
|
Это был UNIX way лет 20 назад. А сейчас - это ни разу не UNIX way до тех пор пока в ванилу не примут BFS.
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (18:04 21-12-2013), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Цитата: |
у тебя проблемы на сети и иди лечи их
|
это как минимум не user friendly
Цитата: |
Батлы, КС и прочие вещи работают по UDP
|
они не теряют ввод
ключевое слово уже звучало, RUDP, та же юнька по дефолту юзает самый проверенный вариант RakNet
добавлено спустя 34 минуты:
З.Ы. вот ещё вспомнил, на шарпе Lidgren есть, тож UDP библиотека с разными гарантиями
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (19:32 21-12-2013), всего редактировалось 1 раз |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
это как минимум не user friendly
|
Это как минимум то, на что надо опираться.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
ну вообще-то мы сильно отвлеклись, прототип ведь можно сделать и на ТСР, верно?
алгоритмы синхронизации не зависят от транспорта
вообще чтобы не терять фокус разработки я крайне рекомендую к использованию таск-трекер/органайзер trello
там можно заводить разные карточки на разные темы и аккуратно вычёркивать сделанные пункты, штука весьма удобственная, не даром Джоель делал
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
Sh.Tac. : |
я крайне рекомендую
|
Я знаю что такое Канбан, спасибо.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
DIMOSUS.X 997 EGP
Рейтинг канала: 4(67) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
А как можно с профитом считать физику на CUDA?
Насколько мне известно, то даже хваленый PhysiX на самом деле считается процесмором, а видеокарта помогает с прощетом лишь частиц и ткани.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
никак, в рилтайм шина CPU <-> GPU съедает весь профит от быстродействия видяхи
но Варсик, я так понял, не зассав, решил собсную физику, собсную сеть, не знаю, мож собсную СУБД, с прицелом на 10 лет разработки походу
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик 545 EGP
Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002 |
|
DIMOSUS.X : |
А как можно с профитом считать физику на CUDA?
|
Физика - это громко сказано. На самом деле там будут решаться классические задачи определения положения КА, соударения и т.д.
Sh.Tac. : |
в рилтайм шина CPU <-> GPU съедает весь профит от быстродействия видяхи
|
Если минимизировать это общение, то профит появится ))
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
|
|
|
Канал Игры Мечты: «Ищу программеров, сидящих на космосе.» |
|