【Node.js】socket.io-emitter(サーバからのPUSH) の使い方

socket.ioの通信はクライアントがトリガーになっているが、
サーバ側から任意のタイミング、特定のユーザーへメッセージを送信したいことがある。
iOS,AndroidでいうPUSH通知のようなもの)

それを実現するのがsocket.io-emitterというモジュール。
https://github.com/automattic/socket.io-emitter

インストール
# npm install --save socket.io-emitter


PUSH用のコードは以下になる。
今回は emit.js としておく。
名前空間、ルーム、ユーザーそれぞれにPUSHできる。

//emit.js

 var emitter = require('socket.io-emitter')({ host: '127.0.0.1', port: 6379 });

//全接続へ
emitter.emit('other_process', 'broadcasting');

//名前空間へ
emitter.of('/chat').emit('other_process', 'broadcasting to namespace');

//特定のルームへ
emitter.of('/chat').to('room1').emit('other_process', 'broadcasting to room1');

//特定ユーザー(socketID)へ
var socketId = 'vikCSpoMsVDmsJFGAAAB';
emitter.of('/chat').to(socketId).emit('other_process', 'private message');

上記のメッセージを受け取るのはクライアントになるので、
other_process をハンドリングしておく。

$(function(){
	var chatRoom = io('http://192.168.33.10:3000/chat', { transports: [ 'websocket' ] });

	chatRoom.on('other_process', function(msg){
		console.log(msg);
	});
});

今回は既存のアプリケーションプロセスとして、expressを起動する。
# node www/bin

起動を確認したら、emit.jsを実行する。
# node emit.js

すると、emit.js からのPUSHがクライアントに届く。