Сокет-сервер для realtime-игры
|
|
Ghost_in_the_shell | Дата: Суббота, 24 Октября 2015, 22:02 | Сообщение # 1 |
участник
Сейчас нет на сайте
| как часто отправлять данные и в каком формате? как бороться с задержками?
|
|
| |
KamiRonin | Дата: Суббота, 24 Октября 2015, 23:09 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| если шутер - одна частота (каждый мув/акшн перса) если пошаговая стратегия - частота другая.. задержки какие? передачи пакетов или движения перса в игре управляемого по сети другим игроком?
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
maker-rus | Дата: Воскресенье, 25 Октября 2015, 00:45 | Сообщение # 3 |
Гений
Сейчас нет на сайте
| Цитата KamiRonin ( ) задержки какие? передачи пакетов или движения перса в игре управляемого по сети другим игроком? Я так понял он имеет ввиду, высокий ping :)
Цитата KamiRonin ( ) как часто отправлять данные и в каком формате? 1. На каждое действие, которое имеет ты хочешь сохранить или отобразить на другом клиенте. 2. Ключ - значение (шифрованное).
|
|
| |
Ghost_in_the_shell | Дата: Понедельник, 04 Января 2016, 22:28 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Цитата maker-rus ( ) 2. Ключ - значение (шифрованное). если к примеру игрок направил персонажа в точку X:Y, как это отослать?
Сообщение отредактировал Ghost_in_the_shell - Понедельник, 04 Января 2016, 22:28 |
|
| |
dima9595 | Дата: Вторник, 05 Января 2016, 00:02 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| Цитата Ghost_in_the_shell ( ) если к примеру игрок направил персонажа в точку X:Y, как это отослать? Вы не понимаете как это (сокеты) работает? Или не знаете в каком виде отправлять?
|
|
| |
Ghost_in_the_shell | Дата: Вторник, 05 Января 2016, 00:24 | Сообщение # 6 |
участник
Сейчас нет на сайте
| в каком виде отправлять не понимаю
|
|
| |
wernher | Дата: Вторник, 05 Января 2016, 02:09 | Сообщение # 7 |
Only God is Perfect
Сейчас нет на сайте
| Цитата Ghost_in_the_shell ( ) в каком виде отправлять не понимаю Данные через сокет идут побайтово и ты сам выбираешь в каком виде отправлять и парсить в клиете. Из предложений: json, XML (очень удобно использовать сериализацию). Я, например, использую обычный текст в кодировке utf с символом | в качестве разделителя. Парсер получается элементарный и быстро все работает.
|
|
| |
KamiRonin | Дата: Вторник, 05 Января 2016, 08:44 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Цитата maker-rus ( ) Я так понял он имеет ввиду, высокий ping :) При планировании клиент-сервера нужно иметь в виду с какой частотой требуется отправлять данные - для пошаговой стратегии высокая скорость не требуется, для FPS - наоборот нужно отправлять очень много данных почти на каждое движение перса. Об этом вопрос и был. Какие минимальные временные рамки для отправки пакетов.
Цитата Ghost_in_the_shell ( ) если к примеру игрок направил персонажа в точку X:Y, как это отослать? Отправляется просто новая координата. Сервер рассылает ид клиента и его новую координату остальным. Клиентская часть интерпретирует это как смещение персонажа и визуализирует это у тебя на экране перемещая аватара чужого перса по местности в нужную точку (при разработке клиента нужно продумать сглаживание перемещения между двумя последними позициями аватара).
Цитата Ghost_in_the_shell ( ) в каком виде отправлять не понимаю хоть свой формат изобрети "число", "число", "строка" = 1 пакет, где первое число = код пакета (для обозначения его назначения например), второе - ИД клиента, третий стринг - строковое описание какого нибудь сложного типа - вектора, кватерниона и тп и тд. Перед отправкой формируется строковое представление нужных данных (сам решаешь как структурировать описание) и потом отправляешь переведя весь пакет в байты. Нужно стремиться сделать пакет как можно короче, а формат решаешь сам. На стороне сервера можно не парсить, а передавать как есть всем остальным клиентам, или можно парсить и формировать другой пакет и тп.
Цитата wernher ( ) Я, например, использую обычный текст в кодировке utf с символом | в качестве разделителя. Парсер получается элементарный и быстро все работает.
Да, обычная практика. только нужно учитывать что UTF немного по разному обрабатывается в шарпе и Qt например. Учесть это при разработке и все будет ок.
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
Markoffka | Дата: Суббота, 09 Января 2016, 18:00 | Сообщение # 9 |
Pixel Logic
Сейчас нет на сайте
| KamiRonin, пакетики шифровать надо хорошенько, а то человек со снифером плохая штука) если задержки, то могу предложить пакеты движения в один канал, другие пакеты в другой и тд. и задержка какая? нагрузка на сеть или парсинг пакетов?
|
|
| |
Эргалон | Дата: Суббота, 09 Января 2016, 19:06 | Сообщение # 10 |
Вездесущий
Сейчас нет на сайте
| Nitro, в каком виде шифровать лучше всего? Есть какой-нибудь известный мультияп шифратор?
Кубариум Rise of the dark lords
|
|
| |
KamiRonin | Дата: Суббота, 09 Января 2016, 21:01 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Цитата Nitro ( ) пакетики шифровать надо хорошенько, а то человек со снифером плохая штука) если задержки, то могу предложить пакеты движения в один канал, другие пакеты в другой и тд. да конечно лучше шифровать, кто ж спорит!? на стадии формирования в пакет байтов ставим.. само шифрование как таковое тема отдельная.. поэтому тут как бы немного рановато была бы.
Цитата Nitro ( ) и задержка какая? нагрузка на сеть или парсинг пакетов? да выразился так, мол "задержка" я позже объяснил - просто частота обмена данными между клиентом и сервером - для разных видов игр свои потребности в этом смысле.. поэтому и сказал - что это определяет разработку - какие пакеты и каким способом потом кидать.
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
Markoffka | Дата: Воскресенье, 10 Января 2016, 14:20 | Сообщение # 12 |
Pixel Logic
Сейчас нет на сайте
| Эргалон, смотря, что шифровать, если информация, которая не влияет на игровой процесс, то (AES, ГОСТ, Blowfish, CAST, DES), они используют один и тот же ключ для зашифровывания информации и для ее расшифровывания а если важная, то (RSA, El-Gamal), они используют два ключа - один для зашифровывания, другой для расшифровывания. Методы передачи ключа тоже разные - наш общий брат знает их все KamiRonin,
Цитата KamiRonin ( ) да конечно лучше шифровать, кто ж спорит!? на стадии формирования в пакет байтов ставим.. само шифрование как таковое тема отдельная.. поэтому тут как бы немного рановато была бы. ты прав, я чет поторопился а если составляющие пакета: id клиента -> тип передаваемой информации -> ключ -> сама информация могу ошибаться
|
|
| |
Ghost_in_the_shell | Дата: Вторник, 19 Января 2016, 00:47 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Цитата wernher ( ) Я, например, использую обычный текст в кодировке utf с символом | в качестве разделителя. Парсер получается элементарный и быстро все работает. Если правильно понял, всем действиям нужно дать id. например игрок направил персонажа в точку x=234 y=122, и у этого действия id=5, то получиться строка 5|234|122 и на сервере в огромном switch это перебирать?
|
|
| |
Gudleifr | Дата: Вторник, 19 Января 2016, 15:13 | Сообщение # 14 |
почти ветеран
Сейчас нет на сайте
| Цитата Ghost_in_the_shell ( ) то получиться строка 5|234|122 и на сервере в огромном switch это перебирать? Безусловно, switch - это худшее, что можно придумать в такой ситуации. Таблицы, хэши, парсеры, унификаторы... Все это придумано программистами для того, чтобы поставить в соответствие то "что делать" тому "что случилось". Учитесь программировать с самого начала!
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |