オンラインゲームを作る (part.3)

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

オンラインゲームを作る (part.3)

投稿記事 by Dixq (管理人) » 14年前

皆様前回の日記ではお世話になりました。
お陰様で良いデータが集まりました!

さて、大体先日紹介した本は読めました。
本格的なオンラインゲームを突然作ろうとすると挫折すると思ったので、
まずはハンゲームとかでよくあるロビーを作ることにしました。(記念すべき(?)制作一日目)

目指すロビーは各部屋に入る前に待機するような場所で、ログインしている人の名前が表示され、各自チャットで話が出来るというもの。

当然ながら、サーバーで必須なのは沢山の人と同時に連絡が取れること。
今日はクライアントが好きなタイミングでサーバーにアクセスし、メッセージを各クライアントから送ってサーバーで全て表示する仕組みを作りました。

画像

左側がサーバー、右にあるのがクライアント。
クライアントは1000個位まで同時に処理可能。

メッセージがサーバーに届いたらサーバーはブロードキャストを行わないといけないので
受信するとブロードキャストするところまで作りました。

また、独自のプロトコルも作りました。
2バイト…オペコード
2バイト…続くバイト数
nバイト…オペランド
オペコードには
 ・認証要求
 ・ログイン要求
 ・ログアウト要求
 ・チャット文章送信
 ・対応バージョン問合せ
 ・エラー
 ・返答要求
など色々あります。

この辺は特に本に書いてないので手さぐりでやっていこうと思います。
明日は勉強会で遅くなるし、金曜日はダーツ行くから・・次の更新は土曜日あたりかな?
最後に編集したユーザー Dixq (管理人) on 2011年6月29日(水) 23:34 [ 編集 1 回目 ]

アバター
やっくん
記事: 5
登録日時: 14年前

Re: オンラインゲームを作る (part.3)

投稿記事 by やっくん » 14年前

このようなプロトコルはアプリケーション層にあたるんですよね?

<追記>
私も、複数人対応のメッセージを受信するだけのサーバできました!(完成:朝6時50分(笑”)
select関数でタイムアウト設定せずにブロック状態に陥ったりという罠にはまってました。

最終的には本に書いてることを参考に、サーバ側でselect関数を2度使ったんですが、キューさんはどのようにされましたか?

使用箇所は
・クライアントの接続確認
・メッセージ受信
です。
最後に編集したユーザー やっくん on 2011年7月01日(金) 06:56 [ 編集 1 回目 ]

アバター
やっくん
記事: 5
登録日時: 14年前

Re: オンラインゲームを作る (part.3)

投稿記事 by やっくん » 14年前

ネットワーク専門の教授に良い本が無いか伺ったところ、此方の本を勧められました。
『UNIX NETWORK PROGRAMMING』
<日本語版>
日本語版

英語版は借りましたが、日本語版は図書館に注文しているのでいずれスキャナで取りこむつもりです。
法的にも問題無いみたいなので興味ありましたら渡しますがどうされます?
最後に編集したユーザー やっくん on 2011年7月01日(金) 17:37 [ 編集 2 回目 ]

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: オンラインゲームを作る (part.3)

投稿記事 by Dixq (管理人) » 14年前

> サーバ側でselect関数を2度使ったんですが、キューさんはどのようにされましたか?

selectは一度だけ呼べば良いと思いますよ。
fd_set型に全部情報入りますから。
後に続く3つの引数を用途によって使い分けます。

> ネットワーク専門の教授に良い本が無いか伺ったところ、此方の本を勧められました。

何故そんな本を・・。
ネットワーク系の本なら和書沢山ありますよ。
まぁ英語が日本語と同じように読めるならそれでもよいのかもしれませんが。

> 法的にも問題無いみたいなので興味ありましたら渡しますがどうされます?

ありがとうございます。
私は必要ないのでよいですよ、わざわざどうもです。