Четверг, 25 Апреля 2024, 07:39

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Программирование » Общие обсуждения программистов » Создание реал-тайм сетевой игры
Создание реал-тайм сетевой игры
zodiakДата: Вторник, 17 Июля 2012, 11:56 | Сообщение # 21
постоянный участник
Сейчас нет на сайте
Quote (Qvant)
по TCP если он не дошёл то вернётся ошибка

Ошибка вернется, если нет связи, иначе пакет будет отправлен повторно.

Quote (Qvant)
шлём n пакет на сервер шлём n+1 пакет на сервер шлём n+2 пакет на сервер шлём n+3 пакет на сервер

Qvant, Только вот в UDP пакеты имеют свойство приходить не по очереди. Придется его расшифровать, идентифицировать, пихнуть в нужное место, определить отсутствующие, отправить на них запрос. Я не хочу спорить, просто это или сложно. Возможно гуру сети напишет это с закрытыми глазами задней ногой. Но лучше уж пользоваться надежным ТСП чем править кучу косяков в коде.


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
QvantДата: Вторник, 17 Июля 2012, 12:13 | Сообщение # 22
почти ветеран
Сейчас нет на сайте
Quote (zodiak)
Ошибка вернется, если нет связи, иначе пакет будет отправлен повторно.

У меня в тестах при открывании TCP из 10000 соединений , 3-4 соединения разрывались на локалхосте....редкие передачи данных без сбоев
А вот если нагружал ЦПУ сервера на 100% , тогда при любом количестве соединений полезли ошибки при передачи пакетов - соединения не рвались а пакеты терялись.
Сервер неуспевал их обрабатывать и принимать

то что пакеты могут придти не по по порядку я писал выше (внутри каждого пакета посылается его номер )а на сервере конечно придётся делать приорететную очередь и добавить тайм аут на ожидание неприбывшего пакета , если в течении этого времени он не пришёл , тогда считаем его пропавшим.
VinchensooДата: Вторник, 17 Июля 2012, 13:30 | Сообщение # 23
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (Qvant)
Простенькая проверка на сервере сравниваем полученое время от клиента с временем на сервере.

Ага, и баним людей за то, что у них время отстает или часовой пояс другой.


ArchidoДата: Вторник, 17 Июля 2012, 13:37 | Сообщение # 24
Сэнсэй
Сейчас нет на сайте
Quote (Vinchensoo)
Ага, и баним людей за то, что у них время отстает или часовой пояс другой.

Это не системное время smile , это внутриигровое время, которое периодически синхронизируется между клиентом и сервером.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Вторник, 17 Июля 2012, 13:38
QvantДата: Вторник, 17 Июля 2012, 13:40 | Сообщение # 25
почти ветеран
Сейчас нет на сайте
при первом соединении конечно нужно синхронизировать клиент с сервером ....
клиент получает данные о времени с учётом пинга и запускает свой внутренний таймер

PS. а на системное время и часовой пояс вообще тут не причём.

PS2. синхронизировать можно и один раз при соединении , если конечно пользователь не играет не прырывно неделями smile


Сообщение отредактировал Qvant - Вторник, 17 Июля 2012, 13:42
VinchensooДата: Вторник, 17 Июля 2012, 13:47 | Сообщение # 26
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Archido, Qvant, и в чем логика тогда?)
Думаете, что кто-то сможет подменить пакет, но не сможет найти время?
Детские методы какие-то.


ArchidoДата: Вторник, 17 Июля 2012, 13:53 | Сообщение # 27
Сэнсэй
Сейчас нет на сайте
Quote (Qvant)
синхронизировать можно и один раз при соединении , если конечно пользователь не играет не прырывно неделями

Игра может запускаться на разных платформах (разные архитектуры процессоров), разные тактовые генераторы могут быть в конце концов smile , да и какие-либо внешние условия. Помнится у каких-то процессоров AMD был баг, где как раз ТГ давал сбои на многоядерных процессорах. Поэтому, скажем, раз в 10 мин проводить синхронизацию времени вполне нормальная практика wink , хуже уж точно не станет smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
QvantДата: Вторник, 17 Июля 2012, 13:54 | Сообщение # 28
почти ветеран
Сейчас нет на сайте
Нам не нужно знать конкретное время у пользователя на ПК , нам важно относительное время когда он начал двигаться - чтоб устранить лаги при отрисовки этого игрока в других клиентах которые рядом с ним...
ArchidoДата: Вторник, 17 Июля 2012, 14:05 | Сообщение # 29
Сэнсэй
Сейчас нет на сайте
Vinchensoo
Я про подмену ничего не говорил happy , я говорил, что это не системное время, а внутриигровое, на котором основывается т.н. "лаго-компенсация".
Событие происходит в определенное время на клиенте (стрельба, например), клиент оправляет пакет серверу со штампом времени о этом событии, и сервер, получив это пакет спустя некоторое время (ping) может "откатить" игровой мир на дельту (а время у нас как раз синхронизировано) и проверить, попал ли клиент в кого либо в тот самый момент времени. Как-то так smile .
Как оно поможет бороться с читерами, это не ко мне вопрос wink


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Вторник, 17 Июля 2012, 14:12
ApatiДата: Вторник, 17 Июля 2012, 14:11 | Сообщение # 30
заслуженный участник
Сейчас нет на сайте
Quote (Qvant)
В TCP при этом будут жестоки задержки - послали запрос на передачу пакета - ждём пришёл запрос , если сервер готов - посылаем пакет ждём ответ от сервер что пакет дошёл посылаем запрос на второй пакет...

Запрос посылается только один раз, при инициализации соединения, а потом уже данные просто посылаются когда угодно, без запросов на передачу пакетов, а обратно возвращается подтверждение, что не тормозит передачу данных.
BabSДата: Среда, 18 Июля 2012, 11:13 | Сообщение # 31
частый гость
Сейчас нет на сайте
Забыли такую особенность в TCP - упаковка нескольких исходящих сообщений в 1 пакет ))
QvantДата: Среда, 18 Июля 2012, 11:21 | Сообщение # 32
почти ветеран
Сейчас нет на сайте
Quote (BabS)
Забыли такую особенность в TCP - упаковка нескольких исходящих сообщений в 1 пакет ))

нет я забыл про TCP со скользящим окном , с ним действительно можно сделать скорости почти такую же как и с UDP ... хотя реализиция этого алгоритма сложнее , он не ждёт подтверждения а сразу передаёт следующий пакет.
А подтверждение приходит потом ...
AGENTX001Дата: Среда, 18 Июля 2012, 11:29 | Сообщение # 33
почётный гцупер
Сейчас нет на сайте
BabS, это nagle алгоритм, он выключается)
BabSДата: Среда, 18 Июля 2012, 13:12 | Сообщение # 34
частый гость
Сейчас нет на сайте
AGENTX001, согласен, но человек начинающий и неплохо об этом напомнить. Несколько раз встречал страдание человека над кодом, забывшим об разных мелочах ))
Форум игроделов » Программирование » Общие обсуждения программистов » Создание реал-тайм сетевой игры
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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