2011-07-25 5 views
10

Vì vậy, tôi có vấn đề này bằng cách sử dụng express với socket.io. Tôi nghĩ nó khá tự giải thích; Tôi chỉ cần nhận phiên và yêu cầu dữ liệu tham số đến socket.io. Điều này không thể được thực hiện ở phía khách hàng vì một số phòng sẽ là riêng tư. Bất kỳ giải pháp?Làm thế nào để bạn nhận được dữ liệu yêu cầu với socket.io với node.js và express?

io.sockets.on('connection', function (socket) { 
    socket.join(ROOM ID) 

    socket.on('send message', function(data) { 
    NEED USER ID STORED IN session.user 
    } 
}) 

app.get('/:roomid', function (req, res) { 
    //req.session.user = THE USER ID 
    //req.params.roomid = THE ROOM ID 
}) 

Trả lời

5

Socket.IO 0.7.7 ~ giới thiệu một thuộc tính mới trên ổ cắm được gọi là handshake đây là dữ liệu mà chúng tôi thực hiện yêu cầu bắt tay ban đầu. Nó chứa các tiêu đề, ip và một số thứ khác.

wiki này https://github.com/LearnBoost/socket.io/wiki/Authorizing chạm nhẹ vào chủ thể.

+0

Mặc dù vậy, làm thế nào tôi có thể yêu cầu roomid đến socket.io để tham gia phòng? –

+0

Cửa hàng phiên có phương thức 'get' lấy id sessiond làm đối số, vì vậy bạn có thể lấy sessionid từ tiêu đề cookie và nạp nó trong sessionStore. Nhưng điều này yêu cầu bạn phải khởi tạo cửa hàng theo cách thủ công và cung cấp trong tùy chọn: var store = new express.MemoryStore; express.session ({store: store}); và hơn trong socket.io bạn có thể lưu store.get ('sessionid', hàm (err, data) {// truy cập phiên của bạn tại đây}); – 3rdEden

+5

Ít nhất là trên NodeJS của tôi, "bắt tay" bao gồm các tham số truy vấn của cuộc gọi đến socket.io: '... "url": "/ socket.io/1/?t=1355054837418" ...', vì vậy Tôi đã phải lấy các tham số chuỗi truy vấn từ 'referer', ví dụ, để lấy param "id": url.parse (socket.handshake.headers.referer, true) .query.id –