|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
|
Игра, сервер и клиент03.12.2017, 15:27. Показов 9894. Ответов 32
Метки нет (Все метки)
Добрый день.
Решила я написать простенькую игру для развития реализации дальнейших планов. Пишу на С++ под Linux/BSD платформы и только! На данный момент есть 3D мир и катающиеся по нему шарик - которым я могу управлять. Прекрасно понимаю что такое TCP/UDP, сокеты. Писала простенькие клиент-серверные приложения стандартными средствами. Сейчас начинаю изучать boost asio для экономии времени и удобства, по крайней мере мне так кажется. Суть моей задачи написать северную и клиентскую часть для игры о которой написала выше. Шар в игровом мире начинает двигаться и теоретически клиент должен слать на сервер данные и получать разрешение на действие.. и так.. Что собственно мне не понятно. Какие данные должен слать клиент игры на сервер, json, xml, serialization просто какие-то бинарные данные ? как происходит этот механизм отправки данных? Раньше на простых приложениях я просто подключалась к порту сервера и отправляла json и в конце "\n" что означало конец связи. Я же не могу для игры при каждом движении шара открывать сокет каждый раз и после завершать соединение верно ?! Значит нужно удерживать соединение. А если удерживать соединение, то какой тип данных слать, если json то там много лишнего мусора будет, за секунду шар может поменять 10-100 разных координат в зависимости от скорости самого шара. А еще клиент должен получить ответ от сервера что можно двигаться по этим точкам и там нет преград. А самое не понятное мне, это если 2 и больше шариков - которыми управляют другие пользователи. Как мне получать координаты всех шариков пользователей в реальном времени ? Между нами сервер, как-то слушать нужно или как это работает ?
0
|
|
| 03.12.2017, 15:27 | |
|
Ответы с готовыми решениями:
32
Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Клиент/сервер: клиент посылает серверу слово; определить, является ли это слово палиндромом |
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 04.12.2017, 06:20 | |
Сообщение было отмечено helena_1990 как решение
Решение
helena_1990,
-можно не закрывать сокет -можно слать UDP -можно слать бинарные данные хотя для ваших объёмов разницу увидеть сложно -можно после отправки своих координат получать в ответе координаты других
1
|
|
|
Любитель чаепитий
|
||||||
| 04.12.2017, 10:41 | ||||||
|
если рулит сервер, то все шарики хранятся на сервере, а клиент лишь исполняет у себя то, что сказал ему сервер. если же каждый игрок рулит своим шаром, то каждый игрок должен своим товарищам по серверу отправлять свои координаты. сейчас большинство игр основываются на топологии клиент-сервер, т.к. так проще всего защитить свою игру. советую книгу почитать, так хотя бы сложится понимание о том, что вы вообще хотите. https://www.ozon.ru/context/detail/id/137764980/ P.S. книгу можно найти в интернете.
2
|
||||||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||||||
| 04.12.2017, 15:45 [ТС] | ||||||
|
Нажала кнопку W, шарик начал движение, запустился механизм отправки пакетов на сервер о нажатой кнопке?! Получается данные нужно отправлять в секунду n-раз? Я не понимаю как нужно синхронизировать данные между всеми. Если я буду запрашивать раз в секунду с сервера координаты всех шариков это не будет похоже на некую ДДОС атаку на сервер ? Получается не совсем в реальном времени если игра будет запрашивать данные раз в секунду. Шарики столкнулись а на сервере этого еще не видно из-за пинга. Или у кого-то медленный интернет то его шарик будет дергаться что для 3D мира с физикой совсем ужасно. Это как-то решается интерполяцией или как ?
0
|
||||||
|
Любитель чаепитий
|
||||
| 04.12.2017, 16:01 | ||||
Сообщение было отмечено helena_1990 как решение
Решениенапример, нажали W - отправили событие нажатия на сервер. отпустили - отправили событие об этом и т.д. сервер же, в свою очередь, шлёт вам новые координаты игры n раз в секунду и вы по ним, соответственно, двигаете шарик. по сути клиент только двигает шарик и делает его движение плавным с помощью всяких математических вычислений(в т.ч. интерполяцией), а так же отсылает команды пользователя. всё-таки рекомендую прочесть ту книгу, которую я давал выше. после неё большинство вещей встанет на свои места.
1
|
||||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
|||||
| 04.12.2017, 16:25 [ТС] | |||||
|
Всем спасибо ![]() Добавлено через 13 минут
0
|
|||||
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
||
| 28.12.2017, 09:48 | ||
1)обработку нажатия на клавишу 2)отправку сообщения серверу 3)время передачи до сервера 4)обработчик поступивших данных сервера 5)отправку сообщения обратно 6)время передачи до клиента 7)вот только теперь меняем координаты и перерисовываем кадр??? По мне так совсем не торт. Нельзя на каждый чих спрашивать разрешение у сервера. Подтверждение нужно получать только для каких то более существенных действий. В том же Wow при отвале от сервера можно ещё побегать пару секунд, пока клиент пытается переподключиться, а вот применить какую-нибудь способность уже не выйдет, клиент будет ожидать ответ от сервера (так и будешь бегать с активной иконкой скила, и анимацией его начала, пока ответ не придёт или таймаут дисконекта не выкинет в меню).
1
|
||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||
| 28.12.2017, 11:50 [ТС] | ||
0
|
||
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
||
| 28.12.2017, 23:26 | ||
|
К примеру в танках весь рендер происходит на стороне сервера. Вот это тема) Всякие там валлхаки, телепортеры идут лесом. И подделка исходящих пакетов не имеет смысла.
0
|
||
|
Любитель чаепитий
|
||||
| 29.12.2017, 05:54 | ||||
|
нажали клавишу и бежим туда, куда нажали, а если сервер внезапно решит, что ты читер и не мог туда прийти, то тебя вернёт назад на позицию, которую сервер просчитал. это нужно для того, чтобы читы было невозможно сделать, имея только влияние на клиента. вы видели когда-нибудь WarCraft III? там всё на стороне клиента делается и там постоянно страдали от мапхака, да и сейчас страдают, т.к. сделать его - раз плюнуть. в динамичных играх надо продумывать, на какие действия надо спрашивать разрешения. например, на поворот камеры не надо, а на изменение направления движения надо, даже если ты на 1 градус отклонился, т.к. все объекты, я ещё раз говорю, обрабатывает сервер и он же ими рулит, клиент просто исполнитель команд и посыльный действий клиента.
0
|
||||
|
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
|
||||
| 29.12.2017, 15:33 | ||||
|
Фразы
0
|
||||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||
| 29.12.2017, 16:07 [ТС] | ||
|
0
|
||
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
||
| 29.12.2017, 17:02 | ||
|
0
|
||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||
| 29.12.2017, 17:21 [ТС] | ||
0
|
||
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
||
| 29.12.2017, 17:41 | ||
|
0
|
||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||
| 29.12.2017, 17:53 [ТС] | ||
)) Там уже не рилтайм а пошаговая стратегия бы получилась с 0 fps
0
|
||
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
|
| 29.12.2017, 17:59 | |
|
0
|
|
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
||
| 29.12.2017, 21:28 [ТС] | ||
просто SSR технология не совсем для этих задач. В случае с WOT оптимизация на уровне сети координат. А модель просчета траекторий на сервере не требует рендеринга как самого понятие в это вложенного. Просчитать матрицу координат вершин куда легче. Ну я так думаю, а как оно работает на самом деле нам точно не скажут
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 02.01.2018, 12:57 | ||||||
Сообщение было отмечено helena_1990 как решение
РешениеВторой вариант - неавторитарный сервер. Он занимается только тем что реплицирует присланные события (нажатия клавиш и т.п.) другим игрокамб весь счет происходит на компе каждого. При таком варианте сервер в принципе не обязательное явление. каждый может отсылать события всем другим вообще напрямую. Но нахождение консенсуса вопрос практически неразрешимый. Вариант третий - каждый считает логику/физику только для своего перса и отправляет обновления координат/статуса всем остальным через сервер или напрямую. Это в плане возможности читов вообще фирменное безобразия.При этом попытки делать какой то античит в конечном итоге разовьются до авторитарного сервера. Теперя подробнее про минусы авторитарного: нагрузка по моделированию физики/логики на один комп (сервер) и опять же нагрузка по сетевому трафику. Ну с физикой/логикой тут ничего не попишешь. А вот с трафом методы есть. Суть в чем - обычно в играх не все персонажи играбельны. т.е. есть игроки и есть NPC (в простонородье неписи) управляемые компьютером. Очевидно что состояние игроков серверу необходимо рассылать по любому. А вот с неписями все гораздо интереснее. Им можно рассылать только обновления параметров управляющего ими ИИ. Причем при наличии группового ИИ рассылать можно обновления группе а не каждому отдельному неписю. Синхронность их работы обеспечивается тем что один и тот же алгоритм дает одни и те же результаты при одних и тех же исходных данных. Второй апгрейд - серв так или иначе считает видимость игроком других игроков/неписей/изменяемых объектов и шлет обновления только тех объектов которые игрок видит/с которыми так или иначе взаимодействует по правилам игры. Добавлено через 7 минут Добавлено через 1 минуту Это то что касается реалтайм игр. Для пошаговых стандартная система запрос/ответ. Добавлено через 1 час 53 минуты
1
|
||||||
|
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187
|
|
| 03.01.2018, 19:08 [ТС] | |
|
Не думаю что они используют cuda++ на серверах. Это же сколько нужно купить оборудования. Wargamming конечно не бедные ребята но не настолько чтобы покупать сотни тысяч серверов с видео-картами которые морально быстро устаревают. Сделают новые фишки какие-то и все сервера апгрейдить ? А синхронизировать как ? На одном только RU1 больше ~100к игроков онлайн. А расчет до ms. Хотя с другой стороны иногда ПТ-САУ попадает в окна по интересной траектории.. В принципе для коллизий можно использовать совсем примитивы. Часто видно как снаряд попадает куда-то вот совсем не туда. Ну ладно это от темы я уже ушла
![]() Я пока что сделала сериализацию всего мира на сервере + просчет вершин и поверхностей mesh достаточно большого мира, и без GPU всё летает на моем слабеньком сервере Вот я и думаю что в wot тоже не обязательно прибегать к таким суровым методам как использоватье 10ки тысяч GPU ))
0
|
|
| 03.01.2018, 19:08 | |
|
Помогаю со студенческими работами здесь
20
Онлайн игра, надо написать асинхронные клиент-сервер и сервер-посредник на C# Игра сервер/клиент
Игра Точки JavaFX Клиент-Сервер Взаимодействие WinCC с Labview 2013, как сервер-клиент, так и клиент-сервер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|