09

チャットサーバみたいな何かを実装したい

このエントリはこれからやりたい事を考えを整理するために書いているだけで特にこういう事をやったとかできたという話ではないので、検索経由で来た方に取ってはあまり役に立たないかもしれない。

社内でいろんなところに移動しつつ仕事したいんだけど、その際にちょっとこれどうだったっけ?とおもって人に聞きたい場合にいちいち人のいるとこに移動しないといけない。以前働いていた職場ではircである程度うまくいっていた。個人的にはそれと同じ事ができれば満足ではあるのだけど、前回のエントリであったように、基本的に異なるプロジェクトの情報は見ては行けないルールがあるので、プロジェクト毎にチャットルームを分けたらそれぞれのチャットルームには関係者しか入れない様にしたい。IRCでパスワードつけるようにしてもいいんだけど、今度はその管理が面倒になるし、できればこれもRedmineと連動していると楽なんだけどなー、と思っている。 個人的な理想はRedmineにOAuthがあればいい、と思っていて、これはプラグイン的なものがあるにはあるらしい。今使っているバージョンで動くのかどうか知らないけど。

RedmineにはREST APIがあるので、とりあえずプロジェクトへの参加状況に従って権限判断してくれるチャットサーバ見たいのを書けば良いのではないかと考えた。で、基本的な設計としてはトピックベースのPubSubモデルの通信を実現するような形でいいのかなと思っている。WebSoektかCometで通信するようなWebシステムで、クライアントはブラウザなんだけどもっと限定的にChrome拡張で良いかなと思っている。CometかWebSocket、で当然ノンブロッキングIOでしょということでPython+Tornadoを今のところ選択肢として考えている。しかしTornadoにはセッションという考え方が無いらしい。権限判断の結果最終的に参照可能なトピックをセッション情報として保持していきたいと考えたので、Sessionに保管して起きたかったのだけど、Memcacheとかにそういった情報を保管したらいいのかもしれない。でいろいろ調べてみたんだけど、RedisにまさにPubSubが実装されているらしい。というわけでこれをベースにTornadoで権限判断をはさんでクライアントと通信するという事にしようかと考えた。

しかし再利用性を考えると、あまり依存プロダクトを増やすのは面白くはない。特にWindowsでRedisとかどうなんだ。一応OSSでWindows版が公開されてはいるが。

https://github.com/MSOpenTech/redis

バイナリがダウンロード可能な訳ではないのでVisualStudioをダウンロードしてきてビルドしろという事になりそう。ハードル高い。

最近はMysqlでMemcachedサービスが提供されているらしいので、そっち使った方が割とマルチプラットフォームで大丈夫そうな感じある。Redisよりは。でも5.6で提供されて5.6.7rcまではlatin-1でしか使えないという問題があるんだって。

http://d.hatena.ne.jp/sfujiwara/20121004/1349336278

まあそれより新しいの限定にすれば良いか? けど調べてみるとWindowsではダメらしい

http://dev.mysql.com/doc/refman/5.7/en/ha-memcached-faq.html#qandaitem-16-6-5-1-1

MariaDBではどうなんだろ。まあどのみちWindowsサポートしないだろう。

といって自前でセッションストアを書くのもどうなんだろう?セッションの期限切れ時にストアからきれいに削除する手段があれば良いが、そうでないと面倒になりそうだ。

そもそもTornado自体Windowsでも問題ないんだろうか。

なんでそんなにWindowsを気にしてるかというと、まあ間違いなくシェアがあるので運用時はともかく軽く試してみたり独自に書き換えてみたい場合なんかに開発機はWindowsでも良い、という事にしたい、と思っている。

けどまあとりあえずLinuxかなああ しかし考えれば考えるほどJavaで良いんじゃないかという気がしてくる。今回は勉強のためにもPython+Tornadoを選択しているのだけど。うーん。

というか、ん??ログイン時に生成した情報を保持したいだけであれば別にアプリケーショングローバルな変数で良いんじゃないか。設定によってはMemcachedに飛ばせるとかそんなんで。なんだ。

あと作成したスクリプトをデーモンとして動かしたい場合どうすればいいのか?調べてみたところSupervisorというプロダクトがあるようだ。

http://d.hatena.ne.jp/anatoo/20120310/1331321778

これTornadoでも使えるんだろうか。