iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

Herokuでチャットサーバを動かす ~ Node.js + socket.io

リアルタイム通信できるサーバを作ってみたいと思って手始めにチャットを作ってみました。 はじめはPythonで試してみていました。

y16ra/ws_python · GitHub

チャットといえばググるとNode.jsが定番ぽい感じだったので、別の言語でやってみたいなあというちょっとした反骨精神でPythonを選択してました。

でも、とりあえず動くものを作ってみたところで、もう少しちゃんとしたのをつくりたいと思ったときにRedisやMongoDBにセッションやデータを保存してなんていうのを調べていたらどうしてもNode.jsの情報が多くてひよりました。。w

で、Node.jsで開発したバージョンはこちら。

github.com

でこいつはHerokuにデプロイして動かしています。 デザイン的にちょっとアレだったりしますがプルリクお待ちしてます!

https://nearby-chat-server.herokuapp.com

Herokuで動かすに当たって、環境変数からRedis, MongoDB, Twitter APIへの接続情報を取れるようにしたりしましたが以前にDockerコンテナ使って動かしていたソースをほぼそのまま使ってデプロイできました。

Redis : セッション情報を保存 Mongo : 書き込み情報を保存

Redisは一応スケールできるように採用しています。セッション情報をRedisでレプリケーションさせて複数のNodeプロセスを動かしてもいけるのかなあと。

MongoDBをデータの永続化に利用している理由は、ルームやユーザでシャーディングさせたらスケールできそうなのと、まだ実装できていないのですが地理空間インデックスを利用して自分の近くで作成されたトピックや発言を取得して、近隣の人とゆるく繋がれる感じのチャットにしたかったためです。

今後の予定としては、近隣のひととのコミュニケーションとiOS, AndroidアプリからWebSocket通信でチャットしたり、不在時の書き込みをプッシュ(GMS, APNs)したりする仕組みを実装していけたらと思っています。

応用して、何かゲーム要素とか入れられたら面白いんだけどなあ。 Ingress + Twitter (+ LINE) みたいなサービスで面白い企画できないかなあ、とモヤモヤしてますw

はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-

新品価格
¥3,132から
(2015/5/8 08:14時点)

はじめよう! Ingress(イングレス) スマホを持って街を歩く GoogleのAR陣取りゲーム攻略ガイド できるネットeBookシリーズ