艦これの冬のイベントやりながらcoffee書いてたらLindaができた。おかげで三隈大和大鳳以外全部集まったけどコミケに行けなかった。
前にRubyで実装したこれ
Ruby上に並列言語拡張Lindaを実装してWebSocket/Cometで使えるようにした
を
Node+Socket.IOで実装しなおした。
https://npmjs.org/package/linda-socket.io
RubyよりNode+coffeeの方が並列処理書きやすい。特に本体よりもテスト、coffee+asyncにだいぶ助けられた。あとなんだかんだでEventMachineに気を使って書くのが疲れる。
Node版はタプルに配列が使えないようにした。全部Object(hash)にした。流れているデータを読んで意味がわかりにくいのと、request-response形式で返すタイプの時にマッチングがしにくいため。
インストール
npmでインストールできる。
npm install linda-socket.io
使う
Socket.IOのインスタンスを食わせると既存のSocket.IOの通信を邪魔せずにLinda機能が増える。
ふつうnodeでwebアプリ作るとしたらhttp.createServerとsocket.ioでやると思うけど、それらのインスタンスをLindaに渡せば使えるようになる。
var http = require('http');
var app_handler = function(req, res){
// your web app code
};
var app = http.createServer(app_handler);
var io = require('socket.io').listen(app);
var linda = require('linda-socket.io').Linda.listen({io: io, server: app});
app.listen(3000);
console.log("server start - http://localhost:3000");
詳しくは
Usageに書いた。