Существует несколько способов решить эту проблему. Это зависит от того, как вы хотите использовать фактический модуль. Только один экземпляр для каждого сокета или один для каждого сокета. Я предлагаю вам сделать ваш модуль возвращает конструктор вместо объекта литерала, как показано ниже:
module.exports = function(socket) {
var socket = socket;
this.refresh = function (msg) {
socket.emit('refresh', { message: msg });
}
this.lock = function (msg) {
socket.emit('lock', { message: msg });
}
}
Затем вы можете создавать новые объекты, содержащие фактическое гнездо.
var Period = require('./server/functions/period.js'),
period = new Period(socket);
Одним из решений, вероятно, было бы сделать это с каждым соединительным гнездом.
var periodModule = require('./server/functions/period.js'),
io.on('connection', function(socket){
var period = new periodModule(socket);
//make a call
period.refresh();
});
Вы также можете передать объект io в свой модуль, чтобы получить интерфейс вещания.
module.exports = function(socket, io) {
var socket = socket,
io = io;
this.broadcastSomething = function(..) {
io.emit('data', { data: 'data'});
}
this.refresh = function (msg) {
socket.emit('refresh', { message: msg });
}
this.lock = function (msg) {
socket.emit('lock', { message: msg });
}
}
Большое спасибо! я изменил свой модуль в конструкторе, но теперь я получаю сообщение об ошибке при вызове параметра period.refresh(), что нет метода 'refresh'. Есть идеи? – nofear87
попробуйте вернуть это в модуле – cbass
не работает :( – nofear87