本当は目先にある問題(クライアントのバグ)を解決しないといけないのですが、プログラミングをする時間も無かったので電車の中とか、昼食中とかに無駄パケットのフィルタリングについてアルゴリズムを検討していました。
もちろん、仕様書なしの仕様です。(自分1人だからいいけど)ココに書いておけば忘れても大丈夫だろう。
サーバー側が1プロセスで動いているselect方式であるため、アルゴリズムとしては理解しやすかった。(私は再帰とかすごく苦手なのでforkだとパニックになってるかもです。)
因みに処理効率はどちらが良いのかは分からないです。1CPUだと分散してもあまり意味がないようにも思います。
方法は、パケット送信するクライアントを選択したとき(この時点ではハンドルしか分からない)、サーバー側に保存している位置情報を取り出して今度は送信パケットと解析し、座標が範囲外のものは送信しないようにする。実は単にこれだけ。
その際にサーバー側でクライアントの状態を取得するためにDBもしくはファイル、保存しないのであればメモリ内だけのDBサーバーを制作する必要がある。あとクライアントをハンドルのみで処理していると、ログインするたびにクライアント数が増えてヤバイ事に気づく。やっぱりID発行しないとダメかな。
そんなところで今日はDBのインストールで終わり。とりあえずMySQLとPostgreSQLに対応させますが、MSSQLは開発環境があるものの運用時にサーバーと予算が限定されるので移植に向かないと判断。あとすごく興味があるのは、このブログでも使用しているBerkeley DBはファイルベースで移植性も良くてLinux等には標準で搭載されているみたいなのでライブラリがあればこちらも検討。(多分パフォーマンスはあまり期待できないかも)

コメントする