私は現在、クライアントがソケットを介して送信されるメッセージを使用してターンベースの同期的な方法でサーバーと通信するカードゲームプロジェクトを作成することを計画しています。私が抱えている問題は、次のシナリオの処理方法です。
(クライアントは順番を取り、そのアクションをサーバーに送信します)
クライアントはサーバーにそのターンの動きを伝えるメッセージを送信します(たとえば、テーブルに置く必要があるその手からカード5を再生します)
サーバーはメッセージを受信し、ゲームの状態を更新します(サーバーはすべてのゲームの状態を保持します)。
サーバーは接続されたクライアントのリストを反復処理し、状態の変化を通知するメッセージを送信します
クライアントはすべてリフレッシュして状態を表示します
これはすべてTCPの使用に基づいており、今見てみると、それはObserverパターンのように見えます。これが私にとって問題であるように思われる理由は、このメッセージが他のクライアントのようにポイントツーポイントではないようであり、すべてのクライアントに送信したいためであり、同じメッセージをそのように。
メッセージをすべてのクライアントに送信できるように、UDPでマルチキャストを使用することを考えていましたが、これは、クライアントが理論的に相互にメッセージを送信できることを意味しませんか?もちろん、同期の側面もありますが、これは私が推測しているUDPの上に置くこともできます。
基本的に、このプロジェクトは本当にすべて学習に関するものなので、何が良い習慣になるのかを知りたいと思います。これからパフォーマンスの問題が発生するほど大きくない場合でも、とにかく検討したいと思います。
ただし、メッセージ指向ミドルウェアをソリューションとして使用することに関心がないことに注意してください(MOMの使用経験があり、TCPソケットが不適切な場合はMOMを除く他のオプションを検討することに興味があります!)。