У меня есть общий вопрос о программировании взаимодействия клиент/сервер в сетевой игре. Я использую протокол TCP как протокол, и связь ... работает, но я не уверен, если это эффективный способ.GAMEPROGRAMMING Клиент/сервер связи через ....? (JAVA)
В целом, действия, которые происходят на стороне клиента будет идти Повсеместно все эти шаги: (. Например Fireball отливают)
- Некоторые действия
- [*] Для этого действия я определен (например, # F # 270 # 130 #, что означает, что «F» говорит, что это огненный шар, а 270 - это (например) степень угла, 130 - скорость огненного шара, который снимается.)
- Строка переходит в выходной буфер клиента & waitingqueue
- Строка отправлена
- String принимается сервером
- [*] Серверу нужен интерпретатор строк, который может определять значение строки (здесь: что означает F? Это огненный шар!) & добавляет уникальный идентификатор, на основе которого, из которого клиент получил команду.
- [*] Серверу необходимо рассчитать логику, основанную на действии (огненный шар наносит урон кому-либо, ударяет кого-то (сразу) или просто летает первым?)
- Сервер отправляет (обновленную) строку действий (-ов), которые происходят для всех клиентов. (например, возможно, огненный шар замедляется по скорости по какой-либо причине - здесь будет обновленная строка (# F # 12345 # 270 # 90 # - 12345 - уникальный идентификатор игрока)
- клиентов получают строку
- [* ] клиенты разрешают строку команде + обрабатывают ее (загорать анимациюследующую информацию ...)
- клиент, который отправил исходную команду, сравнивает полученную строку со строкой в очереди ожидания - при равных значениях ничего не делать (чтобы сгладить какое-либо действие, иначе через соединение проблемы/задержки, некоторые действия будут происходить дважды или перейти от места к местоположению на основе ping
Действительно ли необходимо пройти все t hese шаги? На всех шагах, отмеченных значком [*], мне нужно определить новые интерпретаторы строк/действия для каждой команды, поэтому я кодирую каждое действие дважды, клиентский сервер &. Я читал что-то о передаче сериализуемых объектов, но в генетическом смысле идея кажется мне одинаковой, я отправляю объект, который должен интерпретироваться + обрабатываться, и я отправляю объект обратно ...
Любые подсказки? Чтобы решить все общение более элегантно, с меньшей кодировкой? Или немного больше отсортированы - все эти # F # # M # # H # теги для различных действий, делает его более сложным :)
(На самом деле я на самом деле имею следующие обработчик/действия:
- двигаться -Смотри/вращать -hpchange -firearrow -spawn/разъединение ...)
Надеюсь, вы понимаете, что я имею в виду - я знаю, я мог бы просто продолжать кодирование, как это, и он будет работать как-то, но это кажется слишком сложным, как могло бы быть.
Спасибо!
Есть еще больше :) String отправляется, Bytes передаются на сервер, String принимается сервером, а остальные 100 шагов вы не указали – Tala