[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/09 16:45 / Filesize : 18 KB / Number-of Response : 73
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

MMORPG



51 名前:名前は開発中のものです。 mailto:sage [2006/01/22(日) 19:53:14 ID:QU3Ld80h]
誰も見てないだろうから初歩的な質問してみる。

複数クライアントのチャットサーバにおいて
サーバがあるクライアントとの接続を確立したあとどうすべきか悩んでいます。

1、forkしてクライアントとの通信は子プロセスに任せる
 親プロセスはそのソケットディスクリプタをcloseして新たにacceptする
 送受信データの同期はプロセス間通信で親プロセスがなんとかする?
 >>19のscを受け取った時点でfork、親プロセスはscをcloseしたあとにbindのところに戻る

2、ひとつのプロセスで通信と同期を全てまかなう
 最初から接続上限数のソケットディスクリプタをつくっておいて
 サーバの中で送受信を接続上限数分ループさせる
 >>19のscを配列にして>>20のdo-whileをforにしてsc[i]を各々受信する感じ

1を使うとひとつのクライアントとの接続に不具合が発生しても
サーバがこけることはなさそうというのがメリットで
(他人の発言のような)送信すべきデータの取得がややこしそうになるというのがデメリット。
2の場合、親亀こけたら皆こけたの要領でひとつのクライアントとの通信不具合が
サーバ全体におよびそうというのがデメリットで
ループのおかげで受信の順番が決まってるのでそのときに送信をそれぞれ探ればいいから
送信データの取得はチャットだけを考えるなら簡単そうというのがメリット。
という風に考えています。

どっちをMMORPGサーバまで発展させると考えるなら採用すべきでしょうか?
間違った考え方をしている点や気づいていないメリットやデメリット、他の手段
などありましたらご指摘のほうお願いします。






[ 続きを読む ] / [ 携帯版 ]

全部読む 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<18KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef