Golang Revel と Express + Socket.io とのセッション共有 その3 だが、それが正しいかは俺は知らない 編

ラノベ風タイトルで(_ _)です。
だが、結局そういうことなのです。

まず、Revel側のセッション値は、見事に取得できたでございます。
但し、我流も我流でございまして、良い方法があれば、誰かご教授頂きたい限りです。
こういう、パイオニアチックな話題は●uiita当たりのブロガーさんがやってくれそうなもんですが、そもそもRevelとExpressを合わせようとか、変態の極みですね。

さて、まず、Revel側は、
「Go Revel で Redis Sessionの設定」http://d.hatena.ne.jp/factory-g/20150510#1431248569
当たりの設定でRedisでセッション管理と致します。

次に、Express側ですが、Socket.ioでもRedisを使う関係からSession管理もRedisに(私は)しています。
この辺、整理すると、Session管理は、別にRedisにする必要もないかと思いますが、断言できませんので、取り敢えず、この分離に関する議論は、忘れます。
取り敢えず、Express側のRedisセッション管理は以下を参考にコツコツやっておきます。
https://github.com/tj/connect-redis

var express = require('express');
var conf = require('config');            // 定数管理
var session = require('express-session') // セッション管理
var RedisStore = require('connect-redis')(session); // セッションをRdis管理にする

var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

// Express側のセッション設定
app.use(cookieParser());   // cookie用
var sessionStore = new RedisStore({
    host: conf.redis.host,
    port: conf.redis.port
  }
);
app.use(
  session(
    {
      store: sessionStore,
      secret: conf.cookie.secret,
      resave: true,
      saveUninitialized: true,
      cookie: {
        httpOnly: false,
        maxAge: new Date(Date.now() + 60 * 60 * 1000)
      }
    }
  )
);

要らない部分は、省いていますが、かなりの確率で、必要なコードも消しているかもです。
confは、configモジュールで切り出しております。内容は、簡単に想像できるかと思います。

重要なのは、Express専用のセッション管理体系であって、なにかグローバルなルールで縛られている訳ではございません。
はい、当たり前すぎて、自分の無知さが、溢れる文体です_| ̄|○

Socket.ioとExpress側のセッション共有は、以下のHPが親切丁寧です。
「socket.io 1.0 のハンドシェイク(セッション共有)」http://qiita.com/nariyu/items/1c17dd567f866c698481
上記のソースでほぼ大丈夫でした。

var redis = require("redis"),
    client = redis.createClient(conf.redis.port,conf.redis.host);


  // (略)

  io.use(function(socket, next){
    console.log("socket.io側のセッションチェック");
    // クッキーからセッション ID を取得する
    var cookie = require('cookie').parse(socket.request.headers.cookie);
    console.log(cookie);
    var revel = cookie["REVEL_SESSION"];
    var sessionID = revel.split("-")[1];
    sessionID = "session:" + sessionID;
    // 文字列を取得する
    client.get(sessionID, function(err, val){
      if (err) return console.log(err);
      // エラーが無ければデータを取得できたということ
      console.log(val);
      console.log("=====!!!!!!=====");
    });

ソースは、簡略化しています。
まず、Revelでは、セッションキーが、「session:セッションIDムニャムニャ」で入っています。
Express用のセッションでgetをすると、セッションキーや値の取得あたりで、なんやら特別な処理をするらしくて、内容が取得できません。(何やってるんでしょうかね)
ここで、Revelのsessionソースを紐解くと、単純にRedisにget set してるっぽい事に気づきました。
なので、Express側でも、RedisモジュールそのままでGetをすると、見事取得できました。
それが、以下の部分です。

var redis = require("redis"),
    client = redis.createClient(conf.redis.port,conf.redis.host);

ここまでで、Revel→Express + Socket.io のセッションは、OKです。
逆も、同じ手順でやっちまえば出来ると思うのですが、今の所自分の需要がないので、忘れる事にします(o_ _)o

さて、エレガントでもスマートでも無いこの方法は、どうなんでしょうかね。
取り敢えず、Revelのセッションが読むという目的は達成できたのですが・・・・。

自分は、取り敢えずこれで、ソフトを作ろうかと思っております。