我有带房间但没有用户名的socket.io聊天应用程序,除此以外,其他所有东西都可以正常工作:在托管网站之前,我正在浏览器中对其进行测试,并且我使用document.hasFocus()
方法来设计这样的聊天消息,我的代码就是这样
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'))
谢谢
答案 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 });
});
});