Пятница, 22 Ноября 2024, 11:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Сокет-сервер для 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 - это худшее, что можно придумать в такой ситуации. Таблицы, хэши, парсеры, унификаторы... Все это придумано программистами для того, чтобы поставить в соответствие то "что делать" тому "что случилось". Учитесь программировать с самого начала!


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг