ただし、IEには対応しておらず、FirefoxやChrome、Safariのみの対応になってしまいました…。やっぱりIEはJavaScriptもCSSも挙動が違いすぎる。
これらを再現したバージョンを試してみたい方は、リポジトリから持っていってください。
http://code.google.com/p/drrr-like-chat/source/checkout
マシンのスペックにもよりますが、IEでサウンドON、アニメーションONでチャットすると非常に動作が重いということが分かりました。IEの場合はデフォルトで、サウンドOFF・アニメーションOFFにしようかと思います。(その都度設定で変えられる)
重いのはかわりないですが、ここしばらく、サーバーが落ちることがなくなったようです。サーバーが落ちることでチャットができなくなるという最悪の状況はだいぶ回避出来るようになったみたいでなによりです。
デュラララ風チャット 1.0.2をリリースしました。ソースコードならびにパッケージはGoogle Codeで公開しています。パッケージはリリース周期ですが、SVNを利用できる方は、チェックアウトすると、私がその日にコミットした最新版を落とすことができます。
今回、PHP5.1.0でも動くであろう実装をしました。ただし、保証はないです。人柱で動作確認できた方の報告を待っています(笑)。
また、台湾の方と、英語圏の方から翻訳したいというメールが来ていたので、この機会にローカライズ可能な仕様にしました。詳しくは、readmeをお読みください。
なお、設置等のサポートは一切ありません。設置に自信のある方だけが自己責任で行ってください。よく分からない場合はソースコードを読んでください。そんなに長くないです。
現在、サーバーの調整を行っています。改善できるまでしばらく時間をください。
先程、ひらめいた程度の話です。チャットサーバーの遅延などの対処法としてクラウド化するかもしれません。
おおまかな構想ですが、複数のサーバーにチャットルームを設置し、サーバー同士が特定のインターフェイスを介して部屋の情報を共有しあいます。そして、どのサーバーにも同じチャットルームの一覧が表示されます。
ユーザからすると、自分がどのサーバーにアクセスしているか知らなくても、どこかのサーバーにあるチャットルームに自由に出入りできる状態になります。この、「どのサーバーか分からない」というのがミソで、ここが公式だとか、ここが避難所という区別がつかなくなります。これはどういう事を意味するかと言うと、「デュラララ風チャット」というのが、実際は無関係のサーバーが単独でサービスを提供しているのに、ユーザから見ると、まるで巨大なひとつのサービスが存在するようにみえるということです。まさに、クラウドというわけです。
サーバ所有者の立場では、各サーバーは自分のサーバのスペックに合わせて、クライアント数を制限することができるので、サーバーの余ったスペースに10人が参加可能な部屋を1つだけ設置するなどということもできます。たとえ、部屋がひとつだけでも、10台サーバーが集まれば100人、100台集まれば1000人が利用できる計算になります。
サーバー所有者が個々で独立したサービスを提供できるという点は、面白いの可能性を含んでいます。たとえば、サーバーAのチャットでは、入退室のメッセージがツンデレ仕様、サーバーBでは、パスワードつきの部屋が作れる、サーバーCでは、中国語に対応しているなどの、独自の拡張ができるようになります。
以上の機能を実装するかは決めてませんが、暇があったら実験してみたいと思います。
注:ネタバレがあります。
私が、デュラララ!!のチャットを再現する道のりは、竜ヶ峰帝人がダラーズのサイトを立ち上げたものを後から追っていくようなものだ。
竜ヶ峰帝人は、池袋でオフ会をしてあれだけのメンバーが集まるようなコミュニティサイトを立ち上げたんだから、きっとチャットもCometを実装したに違いない。彼の足跡を辿るようにして、私もCometの実装にとりかかった。Cometの実装パターンはいろいろあるが、その中でも一番修正が少なくて済みそうなXHR long-pollingという方法をとることにした。
この方法をPHPでやるとすると、AjaxでPHPにリクエスト → 新しい発言があるまでPHPが無限ループ → 発言が見つかるとデータレスポンスを返す → クライアントがデータを料理して表示 → 最初に戻る という流れになる。
PHPで無限ループするところでは、sleep(1)をかませるのが王道。一秒ごとに新しい発言がないかチェックするわけだ。しかし、このsleep()関数が第一の鬼門だった。チャットアプリは当然ログインしているわけで、セッションを張った状態になっている。このセッションが張られた状態で、sleep()の無限ループがつづいていると、その後に別のスクリプトに出したリクエストが帰ってこない。これは、どうしたものかと調べてみると、sleep()はスクリプト単位ではなく、セッション単位で機能するということ。とりあえず、sleep()に入る直前にsession_write_close()することで解決できた。
そして、Cometにおいて最大の難関にさしかかる。それはIEの対応。Cometは少なくても2コネクションを同時に使う。ひとつは発言のPOST、もうひとつは無限ループしてるスクリプトへのGET。IEだと、同時に2コネクションしか使うことができない。2個もあれば十分じゃないかと思ったら、チャット中に他のページに行くこと(3つ目のコネクションを作ること)ができないことが分かった。これはたぶんTCPの仕様じゃなかったかと思う。だからIEは間違ってない。FFやChromeが寛大なだけだ。
調べてみると、Cometではこの対策として複数のドメインをたらいまわす方法がとられているらしい。Ajaxではドメインを超えて通信できなので、IFRAMEの出番になる……。
ここまでのことを竜ヶ峰帝人は、高校生にしてやりとげたというのか!私が高校生だったころなんて、オブジェクト指向はおろか参照渡しもわからなかったと言うのに。帝人のウェブ技術に脱帽。
先日、カンパを募ったところ、実に多くの方からご寄付をいただきました。デュラララ!!チャットサービスは、ユーザのモチベーションに基づいたのサービスなので、ご寄付いただけるか不安でしたが、想像以上に皆様のサポートが手厚く感激・感動した次第でございます。多くの方が、10円〜500円の単位でご寄付をくださいましたが、協力しあうことでチャットサービスが持続かのうであることが確認できました。
2010/03/31 16:11の寄付額は以下のとおりです。
現時点で、半年分のサーバ代が捻出可能になりました。ご寄付くださった方、大変ありがとうございました!今後も、引き続き寄付を募りたいと思います。
その他19名
特にウェブマネーでのカンパを多くいただきましたが、私のアナウンスがよく伝わらなかったのか、ハンドル名を掲載していいか仰っていただいていない方が大勢いらっしゃいました。もし、寄付くださった方の中で、ハンドル名掲載の依頼をお申し付け忘れた方はお手数ですがメールください。
先日、Dura 1.0.1のソースコードを開示しましたが、現在メジャーバージョンアップ版1.0.2を開発中です。パフォーマンス改善やバグ修正などを含んだものになります。主な仕様変更は以下のとおりです。
また、パッケージングが遅れていてすみません。1.0.2リリースにあわせてパッケージングを行う予定ですので、もうしばらくお待ちください。
この度、多くの方に応援いただいたこともあり、開発者自らチャットサービスを提供することになりました。その第一歩として、過密状態にあった部屋制限を緩和し、50名から250名が利用できるスペースを拡大しました。この裏側では、月額200円の共用サーバから月額3000円の仮想専用サーバへグレードアップしてます。当初は、月額1万円する専用サーバを検討していましたが、専用サーバに移る中間的なステップとしてワンランク下の仮想専用サーバにすることにしました。今後もアクセスをが増えるようでしたら、専用サーバも検討していく次第です。
新しいURLはこちらです。
さて、今回のサーバを拡張するのに伴って、課金を心配されている方がいらっしゃいます。ですが、心配には及びません。課金をする予定はありません。デュラララ風チャットルームは、趣味の一環で作ったので、そもそもお金儲けする計画はなかったのです。
とは言っても、年間36,000円ほどのサーバ代などの物理的なコストがかかってしまいます。私が趣味でこれだけのコストを賄うのは苦しいのが現状です。そこで、善意で寄付してくださる方を募りたいと思います。ひとりに3000円くださいということではなく、大勢から少しずつ(100人から30円など)あつまればいいと考えております。デュラララ風チャットを気に入って下さり、これからも使っていきたい方からは是非、寄付をお願いしたいと思います。
寄付をいただいた方は、お名前(ハンドルネーム)をコントリビューターとして、ikebukuro-dollars.comに掲載させていただこうと思います。
寄付をいただくに当たり、毎月の目標額を3000円に設定します。その3000円はその月のサーバー代に当てます。今日は3月30日なので、今からは4月分の寄付を募ります。
もし、その月に3000円集まらなかった場合、つまり赤字が出た場合、申し訳ありませんが、チャットサービスを終了させていただくか、サーバーとチャットルームを縮小させていただこうと思います。逆に、3000円を超えて寄付が集まった場合、つまり黒字が出た場合、その黒字の部分は翌月・翌々月のサーバー代3000円に当てさせていただきます。
基本的に、利益を出すことが目的ではないので、収支がプラスマイナス0になるべきです。それでも、なお黒字の分を消費できない場合は、サーバー拡張、開発費用に当てさせていただこうと思います。
銀行振り込み(こんな方法で寄付したほうがもっと楽というのがあれば教えてください)
ぷちカンパでご寄付くださった方は、ぷちカンパのメッセージ欄に記載して送ってくださいますようお願いたします。
お手数ですが、銀行振込でお振込みくださった方は、以下を記載したメール(
)を送ってくださいますようお願い申し上げます。
デュラララのチャットを再現するに当たって、「作ってくれてありがとう」と感謝とお褒めの言葉を沢山頂きました。しかし、チャットルームを作ったのは私ではありません。私は単に「再現」しただけです。チャットルームを作ったのはアニメや原作であり、私はアニメの世界と現実世界を繋げる橋を作ったに過ぎません。
私は現在、無収入の学生ですが、デュラララの世界への通行料として、1000円ほどデュラララチャットルームの運営費に寄付したいと思います。そして、みなさんの力をお借りして、デュラララの世界に通じる橋を強固にしていきたいと考えています。皆さんの、皆さんによる、皆さんのためのチャットルームを作ってみませんでしょうか?
氷川 XOOPS Module 開発室