2012-10-05 1 views
6

첫 번째 문제
세션, 상점, 인증 및 재발행을 파악하려고합니다. 중요한 경우 [email protected]을 사용하고 있습니다. 내 RedisStore() 두 가지 옵션이 있다는 것을 이해합니다. 어느 것을 사용합니까? 둘 다 사용합니까?node.js에서 socket.io로 redis를 설정하고 표현하는 방법은 무엇입니까? 구체적으로 RedisStore()를 사용합니다.

express.session({secret: 'secret', key: 'key', store: new RedisStore()}); 
io.set('store', new RedisStore()); 

는 이미 node.js, expresssocket.io 실행합니다. 이제는 redis을 구현하려고하지만 세션/저장소를 사용하여 권한을 구현하는 방법을 알지 못하고 redis 데이터베이스에 쓰는 방법을 모르겠습니다. 이것에 대한 문서를 찾지 못했습니다. socket.io and express을 사용하여 세션과 상점에 대해 이야기하는 사이트를 발견했지만 세션과 상점에 대해 이야기하고있는 또 다른 하나는 using all three입니다.하지만 io.set('store', ...)은 사용하지 않습니다.

express에 하나, socket.io에 하나, 두 개 다른 점포를 사용해야하는지, 아니면 하나만 사용해야하는지 잘 모르겠습니다. 설명을 위해 예를 살펴 보겠습니다 :

//Redis Variables 
var redis = require('socket.io/node_modules/redis'); 
var RedisStore = require('socket.io/lib/stores/redis'); 
var pub = redis.createClient(); 
var sub = redis.createClient(); 
var client = redis.createClient(); 
var redis_store = new RedisStore({ 
         redisPub: pub, 
         redisSub: sub, 
         redisClient: client 
         }); 

app.configure(function(){ 
    //...code goes here... 
    app.use(express.session({ 
        secret: 'secret', 
        key: 'key', 
        store: redis_store //Notice I'm using redis_store 
        })); 
    //...more code... 
}); 

io.configure(function(){ 
    io.set('store', redis_store); //Notice it's the same RedisStore() being used 
}); 

내가 각각 같은 RedisStore()를 사용하십니까? 각각에 대해 별도의 파일을 만들 수 있습니까? express 또는 socket.io 만 사용합니까? 내가 정말로 원하는 것은 클라이언트를 인증 할 수있는 것입니다 (세션을 통해 완료된 것으로 가정합니다). 연결될 때 redis 데이터베이스를 업데이트해야합니다. 사람들이 내 사이트에 액세스 할 때의 로그를 유지해야합니다. 두 번째 문제가 생깁니다. 두 번째 문제


그래서 나는 액세스하고이 시점에서 레디 스 데이터베이스를 수정하는 방법을 모른다. 때문에 나는 내 첫 번째 문제의이를 테스트 할 수 없었다 그러나 나는 이런 식으로 뭔가있을 것입니다 가정 : 나는 또한 노드 내에서 레디 스 데이터베이스를 업데이트하는 방법에 대한 문서를 보지 못했다

io.sockets.on('connection', function(socket){ 
    var session = socket.handshake.session; 
    redis.put(session); 
}); 

. js 그래서 내가 의심의 여지가redis.put() 정확한 용어는 하하입니다. redis's website을 방문했지만 node.js에 대한 명령을 찾을 수 없습니다. 명령 줄에서 정규 redis를 사용하기위한 명령입니다. 어쨌든, 누군가가 적어도 올바른 방향으로 나를 가리킬 수 있다면 그것은 좋을 것입니다. 감사. :)

+0

메모 : redis 저장소에서 암호를 사용하게되면 RedisStore 생성자의 일부로 'redis'키 아래에있는 redis 모듈 자체를 전달해야합니다. 자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/questions/13438613/redis-auth-error-with-node-js-and-socket-io – Konklone

답변

3

Express와 Socket.IO는 본 것과 같이 세션 관리를 위해 Redis와 자체적으로 통합되어 있습니다. 이것은 블랙 박스 통합으로 설계되었으므로 세션 저장소 구현이 나머지 코드와 독립적입니다. 독립적이기 때문에 Redis에 직접 액세스하려면 express 또는 socket.io를 사용할 수 없습니다. node_redis와 같은 일반적인 redis 클라이언트를 추가해야합니다. 이점은 모든 redis를 직접 호출하는 것에 대해 걱정할 필요가 없다는 것입니다. 대신 express 또는 socket.io의 세션 저장소 인터페이스와 상호 작용할 것입니다.

그래서 # 1 경우에는 새로 작성한 두 개의 RedisStore 인스턴스 만 전달할 수 있습니다. 또는 두 번째 링크를 따라 가며 socket.io를 통해 빠르게들을 수 있습니다. 이 경우 명시적인 세션 관리와 통합됩니다. 그래서이 예제에서 여분의 io.set ('store') 호출을 보지 못합니다.

아마도 여러분에게는 불필요한 것처럼 보이 겠지만, RedisStore는 세션 관리 전용으로 설계된 특별한 클라이언트로 생각하십시오. RedisStore가 node_redis와 같은 것에 의존한다고 생각한다고해도 액세스를 시도해서는 안됩니다.첫 번째 장소에 다른 비 세션 항목을 저장하려고한다고 가정 할 때 redis 데이터베이스에 직접 액세스하기위한 다른 라이브러리를 포함해야합니다.

+0

예 데이터베이스에 다른 것을 쓰려고합니다. Ok [node_redis] (https://github.com/mranney/node_redis)에서 이미 redis 변수를 사용하여 액세스하고 있음을 알 수 있습니다. 그러나 'redis install nis install'을해야한다고 분명히 말하면됩니다. socket.io와 동일한 수준으로 데이터베이스에 대한 내 자신의 액세스를 위해 그 인스턴스를 사용합니까? 또한, 그 일을 계획하고 있으므로 express 또는 socket.io의 상점에서 정말로 원하는 모든 것은 세션 데이터에 액세스 할 수 있어야합니다. 그런데도 RedisStore()를 사용해야합니까? 아니면 첫 번째 링크 쇼처럼하고 MemoryStore를 사용해야합니까? – Aust

+0

예, 아마도 당신이하고 싶은 것은 socket.io 패키지 안에 redis 클라이언트를 사용하지 않고 프로젝트 루트에 자신의 것을 포함시키는 것입니다. MemoryStore는 나쁘지 않지만 다중 웹 서버를 원하거나 노드를 다시 시작하여 세션을 유지하려는 경우 RedisStore를 계속 사용합니다. redis 세션을 유지하려면 socket.io 프로젝트에서 redis 저장소를 가져 오는 대신 connect-redis를 살펴보아야합니다. –

관련 문제