new takyam();

Qiitaぽい話はQiitaに書いていくことにする気がする http://qiita.com/takyam

koaとsocket.ioの連携

最近話題のkoaっていうNodeのWAFがございまして、触ってみたかったので触ってみたはなしです。
ちょっと試すつもりがドはまりんぐ。

koaについては以下の記事をご参照ください。

koa入門 - from scratch

Express - ごめんなさい、koajsに浮気しちゃいました - Qiita [キータ]

かずぽんブログ • 新しいWebフレームワーク Koa について

ECMAScript6から使える Generator(yield) を使う事でイケてる感じにしたExpressみたいな感じです。
実際Expressよりなうくて良い感じに書けるんですが、何せドキュメント少なくてしょんぼりんぐ。

Socket.IOと組み合わせたドキュメントが(ググり力低いために)見つからず、
モニョモニョドハマりしながら適当に書いてみました。

takyam-git/koa-chat · GitHub

たぶんポイントは app.callback() を渡すポイント。

var koa = require('koa'), app = koa();
app.use(route.get('/', function*() { this.body = 'hello world'; }));

//appの定義が終わったあとにcallbackしないとちゃんと動かないよ。たぶん。
var server = require('http').Server(app.callback())
  , io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) { /* something */ });
server.listen(3000);

socket.ioとかexpressみたいなやつと連携するときには、
app.callback() 使うのが正解っぽいんですが、これが早過ぎるとアカンぽくて、
app.use()が諸々終わった後に渡してあげないと何故か動かんかったです。

ソースまで追っかけてないのであれですが。

詳しくはレポジトリみてくだしぃ。

koaの感想

まず、ググるときに、kaoってtypoしまくったので若干イラッってしたよ!
"koa"とかkoajsとかしようね。
koaだけだとコアって日本語もマッチしちゃうからあんだかなーだよ!

それはさておき、たぶんかなり革新的でありながら、
特に出来る事が代わったわけでもない現状だと趣味要素が強く、
んだけど1年後にはExpress捨てられてkoa一色になってる気がする、
そんな感じのフレームワークでございました。

ただ、現状ではドキュメント(および周辺のブログ記事とか)や、
関連ライブラリ類がまだ少ないので、先走りたい人は楽しいと思いますが、
初心者ならExpress使っとくのが無難だと思います。

といいつつ自分はSocketStreamフェチなので、
SocketStreamにもGeneratorとか取り入れられるといいなーと思ってますっ!