Node.js
Socket.io

【SOCKET.IO Node.js】SOCKET.IOでメッセージングサーバー作ってみた

More than 1 year has passed since last update.

メッセージングサーバーって言い方あれですが
ようはリアルタイムでクライアントに通知送れるやつです。

やりたかって事としては、ルーム内でのチャット的な使い方で
ルームに入室してる特定の人にのみメッセージを通知するみたいなのを
汎用的にかつ、スケールしやすく、手軽に使えるようなの欲しいなーと思い作りました。
(socket.ioのおかげでコード量かなり少なくてハッピー。)

スクリーンショット 2017-11-24 17.06.45.png

https://github.com/YasunobuSasaki/Socket.IO-Redis-Scalling

↑の index.jsがサーバーのコードになります。

コネクション周りの処理

// socket.io Handling
io.adapter(redis({ host: config.get("redis").host, port: config.get("redis").port }));
io.attach(server);
isWorker = sticky.listen(server, 3000);

var store = {};
if (isWorker) {
  io.on('connection', (socket) => {

    // ここがルームの入室処理。 ルームを一意に特定できるkeyを渡す感じで
    // 推測されないようなhash値とかを渡すのがよいかなーと。
    socket.on('join', function (key) {
      socket.join(key);
    });
    socket.on('disconnect', () => {

    });
  });
}

メッセージを通知する処理

// 認証とかバリデーションとか色々通したいので、
 // HTTPのリクエストを受けてsocket.ioへのPUB処理してます。
 io.to(param.key).emit('message', param.message);

そのうちSSLの対応とか、Redis Clusterに対応させるとかやる予定。

SSL対応はこんな感じでなんとかなるらしい。

var io = require('socket.io').listen(3000, {
    key : ".keyへのファイルパス",
    cert: ".crtへのファイルパス",
    ca: ".cerへのファイルパス"
});