hagino3000's blog

平成アーカイブス (更新停止)

0mq(zeromq)をnode.jsで使う

depthJSを参考にKinectとブラウザの連携をさせていたのだが、depthJSは中間層がPythonのtornadeなので、node.jsにしてみた。

インストールはnpmからできた。コードはこれだけ。

var http = require('http'),
    io = require('socket.io'),
    zmq = require('zeromq');

var server = http.createServer();
server.listen(9876);

// node.js ==> browser
var webSocket = io.listen(server);
webSocket.on('connection', function(client) {
  console.info('browser connect!!!');
  client.on('disconnect', function() {
    console.info('disconnect');
  });
});

// OpenKinect ==> node.js
var zsocket = zmq.createSocket('sub');
zsocket.on('message', function(event, data) {
  webSocket.broadcast(data);
});
zsocket.on('error', function(err) {
  console.info('error');
  console.info(err.toString('utf8'));
});
zsocket.connect('tcp://127.0.0.1:14444');
zsocket.subscribe('event');


WebSocketの実装はSocket-IO.nodeを使った。しかしこれはWebSocketを隠蔽しまくっているので、単純な使い方をする場合は別の実装を使った方がよさげ*1。0mqは触るのも初めてだったが、感触としては別の言語で書かれた物を連携させるのにすごい便利。しかも簡単に使える。

リンク

ZMQ API DOC
http://api.zeromq.org

*1:動作がよくわからなかったのでsocket.io.jsを読んだ