Socket.io: позиции сообщений чата - PullRequest
0 голосов
/ 08 марта 2019

У меня есть приложение чата socket.io с комнатами, но без имен пользователей, все работает, кроме этого: до того, как я разместил свой сайт, я проверял его в своем браузере и использовал метод document.hasFocus() для создания таких сообщений чата, как этот enter image description here и мой код был таким

 if (!document.hasFocus()) {

        var mess = data.message;
        var encod = $('<div />').text(mess).html();
        output.innerHTML += '<div class="hisout"><p class="me">' + encod +
            '</p></div>'

        output.scrollTop = output.scrollHeight

, в противном случае класс div внутри моего выходного div был бы myout

, он работал в моем браузере во время тестирования и также работал во времяПри производстве, но не с двумя разными устройствами, это вызывало странные вещи, например, сообщения моего партнера отображались как мои (часто), так что кто-нибудь знает, решить эту проблему?вот мой код на стороне сервера

 socket.on('chat', function(data) {

 chnm.in(socket.current_room).emit('chat',data);

 });

chnm - пространство имен чата (io.of ('/ url'))

спасибо

1 Ответ

1 голос
/ 12 марта 2019

Вам нужен способ добавить свойство владельца к сообщениям, которые вы отправляете клиентам.Это должно происходить из сеанса, контролируемого сервером, чтобы клиенты не могли подделать других клиентов и т. Д. Таким образом, у вас была бы какая-то форма входа в систему, которая создала сеанс на стороне сервера, и затем вы использовали бы это, чтобы добавить идентификатор пользователя к сообщениям..

На самом деле это может быть что-то подобное с использованием экспресс-сервера ..

const expressSession = require("express-session");
const sharedsession = require("express-socket.io-session");

const io = require("socket.io").listen(server);

const session = expressSession();

// // Share session with io sockets and auto save on change
io.use(sharedsession(session), { autoSave: true });

io.on("connection", socket => {
  const { session } = socket.handshake;
  socket.on('chat', function(data) {
  chnm.in(socket.current_room).emit('chat', { ...data, user: session.userId });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...