Создание реал-тайм сетевой игры
|
|
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) Ага, и баним людей за то, что у них время отстает или часовой пояс другой. Это не системное время , это внутриигровое время, которое периодически синхронизируется между клиентом и сервером.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 17 Июля 2012, 13:38 |
|
| |
Qvant | Дата: Вторник, 17 Июля 2012, 13:40 | Сообщение # 25 |
почти ветеран
Сейчас нет на сайте
| при первом соединении конечно нужно синхронизировать клиент с сервером .... клиент получает данные о времени с учётом пинга и запускает свой внутренний таймер
PS. а на системное время и часовой пояс вообще тут не причём.
PS2. синхронизировать можно и один раз при соединении , если конечно пользователь не играет не прырывно неделями
Сообщение отредактировал Qvant - Вторник, 17 Июля 2012, 13:42 |
|
| |
Vinchensoo | Дата: Вторник, 17 Июля 2012, 13:47 | Сообщение # 26 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Archido, Qvant, и в чем логика тогда?) Думаете, что кто-то сможет подменить пакет, но не сможет найти время? Детские методы какие-то.
|
|
| |
Archido | Дата: Вторник, 17 Июля 2012, 13:53 | Сообщение # 27 |
Сэнсэй
Сейчас нет на сайте
| Quote (Qvant) синхронизировать можно и один раз при соединении , если конечно пользователь не играет не прырывно неделями Игра может запускаться на разных платформах (разные архитектуры процессоров), разные тактовые генераторы могут быть в конце концов , да и какие-либо внешние условия. Помнится у каких-то процессоров AMD был баг, где как раз ТГ давал сбои на многоядерных процессорах. Поэтому, скажем, раз в 10 мин проводить синхронизацию времени вполне нормальная практика , хуже уж точно не станет
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Qvant | Дата: Вторник, 17 Июля 2012, 13:54 | Сообщение # 28 |
почти ветеран
Сейчас нет на сайте
| Нам не нужно знать конкретное время у пользователя на ПК , нам важно относительное время когда он начал двигаться - чтоб устранить лаги при отрисовки этого игрока в других клиентах которые рядом с ним...
|
|
| |
Archido | Дата: Вторник, 17 Июля 2012, 14:05 | Сообщение # 29 |
Сэнсэй
Сейчас нет на сайте
| Vinchensoo Я про подмену ничего не говорил , я говорил, что это не системное время, а внутриигровое, на котором основывается т.н. "лаго-компенсация". Событие происходит в определенное время на клиенте (стрельба, например), клиент оправляет пакет серверу со штампом времени о этом событии, и сервер, получив это пакет спустя некоторое время (ping) может "откатить" игровой мир на дельту (а время у нас как раз синхронизировано) и проверить, попал ли клиент в кого либо в тот самый момент времени. Как-то так . Как оно поможет бороться с читерами, это не ко мне вопрос
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, согласен, но человек начинающий и неплохо об этом напомнить. Несколько раз встречал страдание человека над кодом, забывшим об разных мелочах ))
|
|
| |