【C#】Server/Client サンプル

MMORPG ゲームサーバープログラミング】
第2章チャットサーバーを参考にServer/Client実装するサンプルです。

MMORPGを作りたくてサーバプログラミングを調べたら
ネット上のサンプルでは

  1. Client->Serverに送信
  2. Serverが受信する
  3. Server->Client送信
  4. ソケット切断

のが多くて、MMORPGではの解説が少なかった。

この本では、

  1. 受信用スレッド
  2. 送信用スレッド
  3. 同期用スレッド
  4. サーバー間の通信スレッド

4つスレッドを分けて負荷分散する方法を紹介されました。

少し古い本(2005年)なので、記載されたサンプルは C言語 で書かれてました。
Unityとロジック共有したいため、今回はC#にアレンジします

※読みやすくするため一部コードは省いてます。(いつか解説します。

Session

Client -> Server 接続後、Server側がClientの接続情報を保持するクラスです
gist.github.com

Command

受信したデータを解析し、プロトコールの種類やシリアライズ済のデータを保持するクラスです
gist.github.com

Server

チャットサーバーです。
やってること

  1. Main関数には TcpListener を初期化と送受信スレッドを生成する
  2. 各スレッドは while(true) を使ってループし処理を実行する

gist.github.com

Client

フロントエンドです
Unityを使ってます
gist.github.com

最後に

本を読んでワクワクしてプログラムを組んで動いたら
誰かと共有したくて駆け足でこのエントリを書きました。

気付いたことやアドバイスなど、ぜひコメントください~