Rob*_*lpe 12 javascript connect node.js express socket.io
使用最新版本的connect(截至2012-07-26),我发现以下方法可以从socket.io获取可与connect-redis存储一起使用的会话ID.
var express = require('express')
, routes = require('./routes')
, fs = require('fs')
, http = require('http')
, io = require('socket.io')
, redis = require('connect-redis')
, connect = require('express/node_modules/connect')
, parseSignedCookie = connect.utils.parseSignedCookie
, cookie = require('express/node_modules/cookie');
var secret = '...';
var rStore = new(require('connect-redis')(express));
//...
var server = http.createServer(app);
var sio = io.listen(server);
sio.set('authorization', function(data, accept) {
if(data.headers.cookie) {
data.cookie = cookie.parse(data.headers.cookie);
data.sessionID = parseSignedCookie(data.cookie['connect.sid'], secret);
} else {
return accept('No cookie transmitted', false);
}
accept(null, true);
});
Run Code Online (Sandbox Code Playgroud)
data.sessionID 然后可以在以后使用,例如
sio.sockets.on('connection', function(socket) {
console.log('New socket connection with ID: ' + socket.handshake.sessionID);
rStore.get(socket.handshake.sessionID, function(err, session) {
//...
});
});
Run Code Online (Sandbox Code Playgroud)
不必从快递进口这么多(连接,连接的一种实用工具,并且该cookie模块)好像越来越解析连接的签署饼干所需的功能过于迂回的方式.有没有人找到另一种方式?
我遇到了同样的事情,只是写了一个小模块来抽象它.以下是它的用法.它是使用express 3编写和测试的,所以应该可以正常使用connect 2.4.x. 请让我知道.
var SessionSockets = require('session.socket.io')
, sessionSockets = new SessionSockets(io, sessionStore, cookieParser);
sessionSockets.on('connection', function (err, socket, session) {
//your regular socket.io code goes here
});
Run Code Online (Sandbox Code Playgroud)
有关其工作原理的更多详细信息,请参阅https://github.com/wcamarao/session.socket.io
| 归档时间: |
|
| 查看次数: |
4155 次 |
| 最近记录: |