今更だけど、Chat server を作ってみる。

  • [*] 並列処理の学習。
  • [*] select, poll システムコール
    • Windowsではsocketのみがselectの管理対象に。
  • [*] python 標準モジュール内のSocket関連のクラスを調査。
    • SocketServer
    • asyncore, asynchat
  • サーバーはスレッドを使わない。select basedの並列処理。

GUIとの連係。

  • クライアント側は、blocking を発生させない。
    • non-blocking
    • 通信部分を別threadにする。

Protocol:

  • 行指向なプロトコルで、
  • 先頭4文字がメッセージ・タイプ、
  • TAB区切りで
  • 以降行末までメッセージが続く。
  • データ部がない場合は、TABを省略してもよい。
  • 行末の改行コードは、\x015 \x012

とりあえずここまで実装する。

 ($type,$data) = /^([A-Z]{4})\t(.+)$/;

HELO ... 接続した時最初に送られるメッセージ。
NICK ... 名前の通知
NAME ... 同上
PING ... 接続中なのを確認する為。
PONG ... PINGに対する応答メッセージ。
MESG ... 会話データ
QUIT ... 切断