Socket.io:聊天应用程序消息位置

时间:2019-03-08 12:03:26

标签: node.js express socket.io

我有带房间但没有用户名的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

它在测试时可以在我的浏览器中运行,并且在生产期间也可以运行,但是不能在2种不同的设备上运行,这引起了奇怪的事情,例如我的伴侣的消息显示为我的(通常),所以有人知道解决这个问题吗?这是我的服务器端代码

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

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

 });

chnm是聊天名称空间(io.of('/ url'))

谢谢

1 个答案:

答案 0 :(得分:1)

您需要一种将所有者属性添加到要发送给客户端的消息中的方法。这应该来自服务器控制的会话,因此客户端不能欺骗其他客户端,等等。因此,您将具有某种登录形式,从而创建了服务器端会话,然后将其用于向消息中添加用户ID。

实际上,使用快递服务器可能像这样。

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 });
  });
});