2013-04-04 5 views
0

Если у меня есть сервер, работающий на моей машине, и несколько клиентов, работающих в других сетях, каковы некоторые концепции тестирования синхронности между ними? Как узнать, когда клиент выходит из синхронизации?
Меня особенно интересует, как это делают сетевые программисты в области игрового дизайна (или просто любое приложение), где синхронность в реальном времени будет жизненно важным аспектом успеха.

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

Итак, каковы некоторые способы, с которыми люди сталкиваются с этой проблемой?
Например, они просто вызывают/моделируют латентность в локальной сети перед запуском в зарубежные сети, а затем надеются на лучшее? Я надеюсь, что есть еще несколько конкретных решений, но это то, что я делаю тем временем ...Отладка сетевых приложений и тестирование на синхронность?

ответ

1

Когда вы говорите, что синхронизировано, я считаю, что вы говорите о латентности сети. Это означает, что клиент в локальной сети может получить свою игровую информацию раньше, чем клиент на другой стороне страны. Верный? Если да, то я уверен, что вы можете искать книги или документы, которые охватывают эту тему, но я могу дать вам хотя бы один способ обнаружить эту задержку и обеспечить способ ее управления.

Чтобы определить задержку, ваш сервер может использовать программу маршрутизации трассировки, чтобы определить, сколько времени требуется для получения данных для каждого клиента. Пример общей Linux-программы можно найти здесь http://linux.about.com/library/cmd/blcmdl8_traceroute.htm. Пока сервер обрабатывает данные клиента, он также может непрерывно собирать статистику задержек и предоставлять данные клиентам. Например, сервер может обновлять каждый клиент по собственной задержке сети и какой самый длинный задержка для группы клиентов, которые играют друг с другом в игре.

Затем клиенты могут использовать разности латентности, чтобы определить, когда они должны обрабатывать данные, которые они получают с сервера. Например, клиент сообщает серверу, что его латентность сети составляет 50 миллисекунд, а максимальная латентность для ее группы - 300 миллисекунд. Затем клиент должен ждать 250 миллисекунд, прежде чем обрабатывать данные игры с сервера. Таким образом, каждый клиент обрабатывает игровые данные с сервера примерно в одно и то же время.

Есть много других (и, вероятно, лучше) способов справиться с этой ситуацией, но это должно заставить вас начать в правильном направлении.

Смежные вопросы