У меня есть маршрут, который прослушивает конкретный идентификатор маршрута.Socket.io с несколькими пространствами имен?
/**
* Chat app routes.
*/
app.get('/games/:id', gameChatController.chatRoom);
Основываясь на маршруте id
я могу определить, что игра чат о.
Мой вопрос в том, как использовать это для передачи в socket.io?
бен/WWW
/*
* setup socket.io, and socket-session
*/
var socketIO = require('socket.io');
var io = socketIO(server);
var SessionSocket = require('session.socket.io');
var sessionSockets = new SessionSocket(io, app.sessionStore, app.cookieParser);
var setEvents = require('../events');
setEvents(sessionSockets);
события/index.js
'use strict';
var redis = require('redis');
var sub = redis.createClient();
var pub = redis.createClient();
sub.subscribe('chat');
module.exports = function(io) {
// here io basically is sessionSockets
// TODO: Set a namespace, make it dynamic
var theRoom = 'fifa14';
var namespaceRoom = io.of('/'+theRoom);
namespaceRoom.on('connection', function(err, socket, session) {
if (!session.user) return;
console.log(socket);
}
}
Так что я спрашиваю, как я могу построить это так, что я могу легко передать текущее состояние приложения, чтобы соответствовать состоянию пространства имен сокетов, поэтому пользователи внутри конкретной игры могут только чат внутри этого?
Потому что я не думаю, что делать что-то вроде ниже очень эффективен
Контроллеры/chat.js
/**
* GET/
* ChatRoom page.
*/
exports.chatRoom = function(req, res) {
/*
* setup socket.io, and socket-session
*/
var socketIO = require('socket.io');
var io = socketIO(server);
var SessionSocket = require('session.socket.io');
var sessionSockets = new SessionSocket(io, app.sessionStore, app.cookieParser);
var setEvents = require('../events');
// so here I can pass the route parameters, not efficient!
setEvents(sessionSockets, req.params.id);
res.render('chatRoom', {
roomName: req.params.id
});
};
Так что теперь я могу передать новую игру идентификатор в setEvents()
, но я думаю, это может быть лучше.
'use strict';
var redis = require('redis');
var sub = redis.createClient();
var pub = redis.createClient();
sub.subscribe('chat');
module.exports = function(io, gameId) {
// here io basically is sessionSockets
// Now I can pass the proper id
var namespaceRoom = io.of('/'+gameId);
namespaceRoom.on('connection', function(err, socket, session) {
if (!session.user) return;
console.log(socket);
}
}
Удивительный человек, очень благодарен за ответ. Я собираюсь его прочитать очень внимательно и попытаться его реализовать. –