2012年02月チャットしてらっしゃいチャットのサイトを自作してみました。このチャットサイトに関する色々な話です。興味があったらサイトもみにきてくださいね。「ちゃっとしてらっしゃい」の略です。チャットで、「いってらっしゃい」を「いってら」というような感覚でつけました。0このページのトップへSELinuxの罠ここのVPSでなくて、開発するときにvmwareでCentOSを使っていたときのことです。別PCのFlashDevelopで更新したswfファイルをアップロードしてブラウザで画面を表示しようとするけど、表示できないことがありました。結局元のソースにまで戻ったのですが、それでもやはり表示できない・・・ブラウザのキャッシュに何かあるのかとか、FlashDevelopの設定を変えてしまったのか等いろいろ悩んだ挙句、SELinuxの設定のせいだとわかりました。SElinuxだと細かくアクセスコントロールを設定しないといけないので、scpでアップロードしたものを所定の場所に移動しただけだと、表面上の所有者は正しくても、SELunix的にはapacheからアクセスできないようになっていました。しかたがないので、SELinuxを使わないようにしてしまいました。0このページのトップへFlashでの接続このチャットシステムは、ブラウザ側にFLASHのオブジェクトをおいて、それがサーバとSocket通信し、FLASHはJavascriptとやり取りするようになっています。このシステムではSocket通信できればいいので、特にFLASHにこだわっているわけではないので、JavaAppletでもいいのですが、なんとなくというレベルでFLASHにしてみました。FLASHでの開発はFlashDevelopというフリーのソフトを使ってみました。FLASHでSocketを使うには、ポリシーファイルというのをサーバにおいて、それを決まったポートで待ち受けるという面倒なことをしないといけないので、実際にVPSのサーバにおいて、うまく動くかどうかは結構ドキドキでしたね。http://chattera.net/のリクエストをhttp://chattera.net/chat/home.phpにリダイレクトしていましたが、SEO的にも、通信量的にもよくないみたいなので、http://chattera.net/のアクセスを、http://chattera.net/chat/にしようと思いました。chatの場所がDocumentRootになるようにVirtualHostを設定してみました。何か問題があるかしばらく見守ります。0このページのトップへPoderosaうちは、sshでVPSサーバに入るのに、Poserosaをつかっているけど、みんなは何を使ってはいっているんのかな。TeraTermなんだろうかな。Poderosaは画面内を分割して使えるので便利。0このページのトップへ接続が切れる問題FLASHとサーバがSocketで接続しているので接続が切れる問題が発生します。ひとつは、通信がない状態でしばらくおいておくと、途中の機器が接続をきったりします。これはリロードして情報を更新するようにすればいいのですが、サーバに負荷かけるのも嫌だったので、TCPのKeepAliveを短くすることで対応しました。ひとつの問題は通信中に、本当に接続が切れてもすぐにはわからずに、延々とリトライする問題です。チャットだとすぐに発言が反映されて欲しく、時間がたってから反映されても、もうあきらめて画面を閉じてしまう可能性が高いので、通信のリトライは短くしようと思いました。/proc/sys/net/ipv4/tcp_retries2などとしてリトライ数を短くしました。(初期値は15らしい)これで、通信失敗すると早めに接続が切れるようになったと思うのですが、ちゃんと機能しているかはサンプルが少ないのでよくわからないですね。0このページのトップへブラウザによって動かないものがあるFLASHをつかってサーバと接続しているためか、ブラウザによっては動かないものがあるようです。Chromeを使っていますが、FireFox7や10やInternetExplore8では動いています。InternetExplore7では動かなかったという報告もあります。こちらでいろいろな環境を用意してテストする余裕はないので、今のところどうしようもないですね・・そんなこともあって、みなさんに訪問してみて欲しいですね。0このページのトップへ何人同時にチャットできるんだろう何人同時にチャットできるんだろうVPSは一番安いプランで、CPU2個、メモリ512Mのものです。一人当たりの接続で100バイトも使わないので、1000人同時に接続しても100Kbytesもいかないので、メモリは足りそうですね。問題はCPUとネットワークかも。1000人同時に接続して、平均10秒に1回発言し、発言のデータ転送量が100bytesだった場合、発言あたり10msecで処理すればいいので、CPUはなんとか足りそうで、ネットワークの転送も10KBytes/secくらいなので、足りそうです。発言以外にも、トップページにアクセスしたり、部屋に入室退室する際に、Apache,PHPやPostgreSQLの処理が動くので、これがどのくらいになるかがキーでしょうね。実際にはそんな人数で試せるはずもなく、絵に描いたもちのようなものですが。0このページのトップへ通信方式をきめるチャットの発言をしたら、リロードせずにすぐに相手方に反映したいので、それを実現するためにはSocketで通信するのがいいなと思いました。なると普通のレンタルサーバではできなさそうなので、VPSになるのかなとおもって探してみると、1ヶ月1000円くらいであるんですね。このくらいなら、懐が痛まないのでいいですね。あとは何を使って、Socket通信するか考えて、ブラウザ側ではFLASH、サーバ側ではCで書くことにしました。ブラウザではFLASHを媒介してJavaScriptで画面を制御し、サーバ側で1つのプロセスに複数ブラウザから接続を受けて、リアルタイムにチャットを送受信するという感じです。Perlというような感じになっています。0このページのトップへチャットのサイトつくってみたあるとき、急に思い立って、チャットのサイトを作ってみようと思いました。気軽に利用できるように、登録はしなくてよくて、名前(ニックネーム)を設定すればすぐにチャットできるというのと、リロードを待つのはまどろっこしいので、すぐに発言が反映するというのが、主な要件です。奮闘してつくったのがチャッてらです。試作段階で機能も色々追加していきたいですが、興味がある方はぜひお立ち寄りください。0このページのトップへホームこのページのトップへプロフィールAuthor:chattera.netフリーでソフト開発の仕事をしています。自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。ソフト開発関連のお誘いもうけたまわっております。