편집 : 작동하지 않는 일부 모듈을 시도한 후 실제로이 작업을 수행하기 위해 내 라이브러리를 작성했습니다. 뻔뻔한 플러그 : https://github.com/aviddiviner/Socket.IO-sessions 에서 확인 하세요 . 역사적인 목적으로 아래에 이전 게시물을 남겨 둘 것입니다.
위의 pr0zac 솔루션에 따라 flashsocket 전송 을 우회하지 않고도이 작업을 아주 깔끔하게 얻었습니다 . 나는 또한 Socket.IO와 함께 express를 사용하고 있습니다. 방법은 다음과 같습니다.
먼저 세션 ID를 뷰에 전달합니다.
app.get('/', function(req,res){
res.render('index.ejs', {
locals: {
connect_sid: req.sessionID
// ...
}
});
});
그런 다음보기에서 Socket.IO 클라이언트 측에 연결합니다.
<script>
var sid = '<%= connect_sid %>';
var socket = new io.Socket();
socket.connect();
</script>
<input type="button" value="Ping" onclick="socket.send({sid:sid, msg:'ping'});"/>
그런 다음 서버 측 Socket.IO 리스너에서이를 선택하고 세션 데이터를 읽고 / 씁니다.
var socket = io.listen(app);
socket.on('connection', function(client){
client.on('message', function(message){
session_store.get(message.sid, function(error, session){
session.pings = session.pings + 1 || 1;
client.send("You have made " + session.pings + " pings.");
session_store.set(message.sid, session); // Save the session
});
});
});
제 경우 session_store
에는 redis-connect
라이브러리를 사용하는 Redis 입니다.
var RedisStore = require('connect-redis');
var session_store = new RedisStore;
// ...
app.use(express.session({ store: session_store }));
이것이 Google을 검색하는 동안이 게시물을 찾는 사람에게 도움이되기를 바랍니다.