@moon_and_altair

Можно ли так делать в socket.io node.js?

Хочу разделить большой файл обрабатывающий сокеты на маленькие кусочки. То есть с:
module.exports = function (io) {
    io.on('connection', function (socket) {
        console.log('+');
        socket.emit("sessiondata", socket.handshake.session);
        socket.on("login", function() {
            socket.handshake.session.user = {
                username: "OSK"
            };
            socket.emit("logged_in", socket.handshake.session);
        });
        //И так далее
    });
};


на:

module.exports = function (io) {
    io.on('connection', function (socket) {
        require('./lib/connection')(socket, io);
        require('./lib/login)(socket, io);
         });
};


Получается 2 вопроса.
1) можно ли так делать?
2) можно ли делать
require
без задания переменной
var
?
  • Вопрос задан
  • 804 просмотра
Пригласить эксперта
Ответы на вопрос 3
@vsvladimir
Можно, насколько это хорошо зависит от задачи. Например может потребоваться что-то общее делать и уведомлять об этом все модули.
Ответ написан
Комментировать
kirill89
@kirill89
Не красиво же. IMHO не надо размазывать require по коду - читабельнее когда все зависимости в одном месте прописаны.

var connection = require('./lib/connection');
var login = require('./lib/login');

module.exports = function (io) {
  io.on('connection', function (socket) {
    connection(socket, io);
    login(socket, io);
  });
};
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Делать require без присвоения в переменную можно и нужно, но только не внутри события connection, потому, что require исполняется синхронно, это блокирующая операция, т.е. на каждом подключении будет выполняться код, который будет приводит к чтению файла, а при этом не отдает управления в eventloop. Лучше поместите io на старте в глобальную переменную типа
global.api = {};
api.io = require('socket.io')(80);
api.events.connection = require('./lib/connection');
api.events.login = require('./lib/login');
...
api.io.on('connection', api.events.connection);

А в файле /lib/connection.js написать:
module.exports = function (socket) {
  socket.on('login', api.events.login);
  ...
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы