Перемещение “алгоритм” в Многопользовательских Играх (MMO) клиент-сервер?

Я не вижу никакого ответа, документирующего, как обойти эту проблему с взаимодействующими процессами. Распространенный шаблон с такими вещами, как ssh-agent, состоит в том, чтобы дочерний процесс печатал выражение, которое родительский процесс может eval.

bash$ eval $(shh-agent)

Например, ssh-agent имеет опции для выбора Csh или Bourne-совместимого выходного синтаксиса.

bash$ ssh-agent
SSH2_AUTH_SOCK=/tmp/ssh-era/ssh2-10690-agent; export SSH2_AUTH_SOCK;
SSH2_AGENT_PID=10691; export SSH2_AGENT_PID;
echo Agent pid 10691;

(Это приводит к тому, что агент запускается, но не позволяет вам фактически использовать его, если только вы сейчас не скопировали и не вставили этот вывод в приглашение оболочки.) Сравнить:

bash$ ssh-agent -c
setenv SSH2_AUTH_SOCK /tmp/ssh-era/ssh2-10751-agent;
setenv SSH2_AGENT_PID 10752;
echo Agent pid 10752;

(Как видите, csh и tcsh используют setenv для установки переменных.)

Ваша собственная программа может сделать это тоже.

bash$ foo=$(makefoo)

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

8
задан ldav1s 22 July 2018 в 05:39
поделиться

3 ответа

отказ от ответственности: я работаю в Typemock

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

Комментарий-ответ:

Нет, клиенты все равно сообщат серверу о своей позиции, но сервер не будет пытаться вычислить следующую позицию. Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

но это может остановить резкую повторную синхронизацию, которую вы наблюдаете в исходном алгоритме.

Ответ на комментарий:

Нет, клиенты все равно будут информировать сервер о своей позиции, но сервер не будет пытаться вычислить следующую позицию. Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

но это может остановить резкую повторную синхронизацию, которую вы наблюдаете в исходном алгоритме.

Ответ на комментарий:

Нет, клиенты все равно будут информировать сервер о своей позиции, но сервер не будет пытаться вычислить следующую позицию. Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

клиенты все равно будут информировать сервер о своей позиции, но сервер не будет пытаться вычислить следующую позицию. Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

клиенты все равно будут информировать сервер о своей позиции, но сервер не будет пытаться вычислить следующую позицию. Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

Это будет означать, что сервер (и все другие клиенты) отстают хотя бы на один цикл отправки / получения.

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

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

Обнаружение читов можно было даже отключить для работы или настроить на случайную проверку.

Примечание: вся информация о столкновении / положении объектов в пределах дальности перемещения должна быть отправлена ​​клиенту, чтобы это работало.

6
ответ дан 5 December 2019 в 21:21
поделиться

Есть два способа, которые я могу придумать для этого: пусть клиент выдает команды серверу, и сервер будет основным хранителем карты.

Или сохраните карты в клиентах, и клиентам придется устанавливать соединения с другими клиентами, которые они «рядом», чтобы выполнять перемещение, при этом ведение записей выполняется сервером и проверяется несколькими партнерами (хакер Police).

Меня интересует возможность контролировать одноранговые соединения, а одноранговые узлы, у которых задержка превышает определенный порог, просто не будут отображаться в игре.

1
ответ дан 5 December 2019 в 21:21
поделиться

Ваш сервер настолько медленный, что не может обрабатывать все движения? Особенно в 2-й игре? Обычно, когда я делаю небольшие 2D-игры, сервер возвращает мне все мои движения, поэтому на клиенте не требуется никаких вычислений. Если сервер начинает отставать, я просто немного зависаю, чего обычно и следовало ожидать (хотя этого почти никогда не бывает).

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

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

0
ответ дан 5 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: