В настоящее время я планирую создать проект карточной игры, в котором клиенты будут общаться с сервером поочередно и синхронно, используя сообщения, отправляемые через сокеты. У меня есть проблема, как справиться со следующим сценарием:
(Клиент по очереди и отправляет свое действие на сервер)
Клиент отправляет сообщение, сообщающее серверу о своем ходу за ход (например, разыгрывает карту 5 из его руки, которую нужно положить на стол)
Сервер получает сообщения и обновляет состояние игры (сервер будет хранить все состояние игры).
Сервер перебирает список подключенных клиентов и отправляет сообщение об изменении их состояния
Все клиенты обновляются для отображения состояния
Все это основано на использовании TCP, и, глядя на это сейчас, это выглядит как шаблон Observer. Причина, по которой это кажется мне проблемой, заключается в том, что это сообщение не похоже на двухточечное, как другие, поскольку я хочу отправить его всем клиентам, и не очень эффективно отправляет одно и то же сообщение в сюда.
Я думал об использовании многоадресной рассылки с UDP, так как тогда я мог бы отправить сообщение всем клиентам, однако разве это не означало бы, что клиенты теоретически смогут отправлять сообщения друг другу? Есть, конечно, и синхронный аспект, хотя, я думаю, это можно поставить поверх UDP.
В общем, я хотел бы знать, что было бы хорошей практикой, так как этот проект действительно полностью посвящен обучению, и хотя он не будет достаточно большим, чтобы сталкиваться с проблемами производительности, я хотел бы рассмотреть их в любом случае.
Тем не менее, обратите внимание, что я не заинтересован в использовании промежуточного программного обеспечения, ориентированного на сообщения, в качестве решения (у меня есть опыт использования MOM, и я заинтересован в рассмотрении других вариантов, кроме MOM, если TCP-сокеты - плохая идея!).