Я делаю многопользовательскую игру, и часто хочу проверить, прекрасно ли она работает в глобальной сети, потому что когда-то она работает только локально, так как я могу это сделать без отправки моего клиента в друг, чтобы проверить это.Как протестировать вашу клиентскую серверную программу
ответ
Если вы хотите протестировать его для «глобальной сети» - вам нужно протестировать его таким образом. Есть несколько вещей, которые могут пойти не так, что не является проблемой в локальной сети. Только от верхней части моей головы
- латентности (важно для игры)
- NAT (частая причина проблем в зависимости от вашей игры архитектуры - тем более, если P2P)
- безопасности
- ошибки соединения (WIFI/3G прерывистые потери)
Существует много аспектов сетей, которые часто отличаются друг от друга, когда вы говорите через Интернет, а не работаете на локальном хосте или в локальной сети.
- Всевозможные задержки могут произойти, и это может привести к некоторым неблагоприятным предположениям в вашем коде.
- Поток TCP может зависеть от управления потоком TCP (когда окно TCP заполняет отправитель, он прекратит отправку и сообщит об этом вам (или, возможно, не сообщит об этом, если вы используете асинхронные API)).
- TCP считывает, что возвращает «полные сообщения» на локальном хосте, и ваша собственная сеть может начать возвращать фрагменты сообщения.
- UDP-датаграммы могут пропадать без вести и никогда не прибудут или могут прибыть несколько раз или в любой последовательности.
Итак, вы правы, думая, что вам нужно протестировать свой код для этих случаев краев, которые редко появляются в вашей собственной сети. Вы также правы думать, что просто отправить клиента другу или запустить его на удаленной машине недостаточно.
Один из подходов заключается в создании специального тестового клиента, который отправляет известную игру и проверяет, что она получает ожидаемые ответы (насколько это сложно зависит от вашего протокола и вашей игры). После того, как у вас есть эта работа, у вас есть тестовый клиент, намеренно отправляющий данные таким образом, чтобы проверяемые элементы были протестированы. Таким образом, если вы используете UDP, вы можете поместить некоторый код в свой тестовый клиент, чтобы он иногда не потрудился отправлять дейтаграмму UDP. Клиент должен подумать, что он отправил его. Сетевой уровень просто перегружает его. Это проверяет ваш протокол UDP на отсутствие дейтаграмм. Затем несколько раз отправляйте несколько дейтаграмм, затем отправляйте некоторые из последовательности и т. Д. Для задержек TCP добавьте логические «сообщения» в отдельные сетевые сообщения с большими задержками между ними; в идеале отправляйте каждый отдельный тип сообщения в виде последовательности одиночных байтов, чтобы проверить, правильно ли работает код накопления сообщений сервера.
После того, как вы сделали это, вы должны сделать то же самое для вашего кода клиента, возможно, добавив опцию «Fuzzing» к сетевому коду вашего сервера, чтобы сделать такую же вещь ...
Лично я, как правило, попытаться сделать шаг назад и сделать как можно больше в специальных «модульных тестах» (я знаю, что некоторые люди скажут, что это не модульные тесты, назовите их, что вам нравится, просто напишите их!). Эти тесты используют ваш сетевой уровень, используя реальную сеть (разговаривая с фиктивным сервером/клиентом, который создает тест) и проверяют ужасные случаи.
- 1. Как запустить клиентскую серверную программу на dev C++?
- 2. Как проверить клиентскую и серверную программу на ssh?
- 3. Как разбить клиентскую и серверную связь?
- 4. Java развернуть серверную программу
- 5. Как создать клиентскую программу Java
- 6. Как протестировать эту программу
- 7. Как протестировать программу MPI
- 8. Когда использовать клиентскую или серверную сторону?
- 9. включают pygame в вашу программу
- 10. Как сделать вашу программу открытой при запуске?
- 11. Как добавить подтверждение в вашу программу
- 12. Как автоматически вставлять прагмы в вашу программу
- 13. Как протестировать программу WML-скриптов?
- 14. netty Как заставить серверную программу не останавливаться
- 15. Как настроить клиентскую и серверную модели Spring TCP?
- 16. Создайте клиентскую программу sqlite server
- 17. как сервер может прервать клиентскую программу?
- 18. открытые приложения python через вашу программу
- 19. Каков наилучший способ защитить вашу программу
- 20. Способы сделать вашу программу меньше памяти
- 21. Где будет проще сортировать коллекцию - клиентскую или серверную?
- 22. конвертировать серверную сторону vb.net на клиентскую сторону javascript
- 23. Когда я запускаю клиент-серверную программу, я получаю ArrayIndexOutofBoundException
- 24. Как изолировать вашу программу от вызовов до «плохого» API?
- 25. Как заставить вашу программу копировать себя в другую папку?
- 26. Как интегрировать log4j в мою клиент-серверную программу?
- 27. Как конвертировать простую клиентскую программу TCP-сервера в неблокирующую
- 28. Как вызвать определенную клиентскую программу в Flash Player, контролируемую ActionScript?
- 29. configure пытается протестировать кросс-скомпилированную программу
- 30. Можете ли вы «Очередь» webRequest на фоне ускорить вашу программу?
Вы хотите проверить что-то в глобальной сети, не тестируя ее в глобальной сети? – Dukeling
Просто FYI, определить локально?Если вы используете localhost, вы ничего не тестируете - если вы используете IP-адрес машины, на которой размещена игра, вы золотой. Вы можете даже протестировать на той же машине. Но, по крайней мере, используйте две машины в своей локальной сети. – KevinDTimm