Ответы пользователя по тегу Socket.io
  • Как сделать авторизацию в чате node.js + socket.io на сайте, использующем PHP?

    @globalmac
    А я бы проверял авторизацию сугубо на стороне PHP, например.
    И использовал бы node.js с модулем socket.oi, именно для сигналер-сервера мгновенных сообщений/уведомлений в чате.
    Ответ написан
    Комментировать
  • Пользователь + socket.io, как подключить этого же пользователя в разных вкладках браузера?

    @globalmac
    Socket.io действительно генерирует каждому подключению свой уникальный handshake и это правильно и в порядке вещей.
    Если интересует вывод пользователей онлайн в списке на сайте, например, то решить проблему можно при помощи callback() функции.
    Мы будем передавать на сигналер-сервер user_id, например через PHP и затем проверять, есть ли этот user_id в массиве подключенных пользователей.
    Пример server.js:
    userlist = {}; // Массив юзеров
    io.sockets.on('connection', function(socket) {
    	socket.on('connect', function(data, callback) {
    		socket.user_id = data.user_id; // в user_id передаём идентификатор пользователя
    		if(socket.user_id in userlist) {
    		    callback(false); // Ага, этот юзер уже открыл вкладку, значит ничего не делаем
    		} else {
    		    callback(true); // А вот тут он новенький
    		    userlist[socket.user_id] = data; // Фигачим его в массив
    		    UpdateUserList(); // Обновляем список онлайн юзеров
    		} 
    	});
            // При дисконнекте
            socket.on('disconnect', function() {
                 delete userlist[socket.user_id];
                 // Тут немного магии, чтобы юзеры в списке онлайн на клиенте не моргали, когда например они ходят по ссылкам сайта
                 setTimeout(function () {
                     UpdateUserList();
                 }, 1000);
            });
        
            function UpdateUserList() {
    		io.sockets.emit('updateusers', userlist);
    	}
    });
    Ответ написан
    1 комментарий