AJA Chat
sayさん にたいていの AJAX は Asynchronous では無い、と教えてもらったので、真に Asynchronous なチャットを作りました。あと XML 関係無いので AJA です。
とりあえず上記を見ていただいてもよくわからないのですが、えーといかに Asynchronous かどうかを確認するには、他の人と一緒に入るか、一人で複数種類のブラウザを立ち上げて別名でログインすると良いと思います。残念ながら同一ブラウザで複数入るとか、同じログイン名で入るとかするとおかしいことになります。
えーとそんでなんというか。要するにたいていの AJAX は Asynchronous と言いつつも1秒おきだのでポーリングしてるわけですね。しかしそれでは1秒おきにしか発言が来ないしサーバに1秒おきにアクセスするし…でイマイチなわけです。
で、このチャットで何をしているかというと、まず起動時にサーバに対してコネクションをはります。ですがサーバは sleep(30) とかして返事をしません。で、誰かが発言をした時に、そのプロセスに対して SIGUSR1 が飛びます。そのハンドラではじめて返事をします。そのまま sleep が終了した場合は JS 側で無視される文字列を返却します、そんでクライアントはもう一度コネクションをはります。
つまり常にクライアント→サーバのコネクションを維持しておいて、任意のタイミングでレスポンスを返すことによってイベントドリブン的な処理になっている、と。既にあるかとかはよく知りません。
http://shinh.skr.jp/chat/chat.tgz
にソースコードはあります。
おまけとして mircbot が動いています。 IRC じゃないので機能はだいぶ制限されています。だいたいこんな感じが実行例。
- 15:13:07 mircbot: あなたのBMIは 17.374 です。痩せすぎです。
- 15:13:07 kazehakase: bmi>173,52
- 15:12:58 mircbot: bmi>(cm),(kg) という形式で身長と体重を指定して下さい。
- 15:12:58 kazehakase: bmi>173.52
- 15:12:47 mircbot: a computer.・〜処理する computerize.・〜に入力する put〈data〉into a computer. コンピュータウイルス a computer virus. コンピュータ会議 computer conferencing. コンピュータ技術者 a computer technician.
- 15:12:44 kazehakase: je>コンピュータ
- 15:12:34 mircbot: ━━ n. 辞典, 辞書; 【コンピュータ】ディクショナリー. Dictionary of National Biography (the 〜) 『英国人伝記辞典』. Dictionary of Occupational Titles (米国)職種・肩書辞典 (米労働省発行).
- 15:12:34 kazehakase: ej>dictionary
- 15:12:29 mircbot: 4月10日(月) 曇後雨 11度 9度
- 15:12:29 mircbot: 4月9日(日) 晴れ 17度 ---度
- 15:12:29 kazehakase: weather>
- 15:12:16 mircbot: kazehakaseは自分自身の燃えている油につつまれて焼死した
- 15:12:16 kazehakase: jnhdeath>
- 15:12:13 mircbot: ァ'`,、'`,、'`,、( ̄O ̄) '`,、'`,、'`,、
- 15:12:13 kazehakase: kao>
たぶんたいていのブラウザで動くと思います。不具合としては入退出時に Asynchronous じゃないこととかです。あと機能が少なめなこととか。
追記: ABAさんに示唆されて textbox の内容がそのままリアルタイムで表示されるものも作ってみました。あと URL の自動リンクとかニュースのRSS読んで配信とかがついたりとか。