套接字IO发送消息两次并再次获取它
我有两个问题与SocketIO聊天。似乎聊天工作正常,但它发送两次(或更多)聊天。
User1截图
如果User1发送消息,则显示如此。当我输入内容时,它会显示我键入的内容。
另一个问题来自User2。如果用户2键入类型的东西,它返回两次。我测试了User3,它第三次返回..我不知道为什么它会像这样工作。
用户2截图
[服务器端代码]
router.get(`/:userId/admin/contact`, function (req, res, next) {
let userId = req.params.userId;
// console.log(io);
console.log(Object.keys(io.sockets.adapter.rooms));
let contactArray = Object.keys(io.sockets.adapter.rooms);
// Socket.io
io.sockets.on('connection', function (socket) {
// Join Room
socket.join(`sangumee-Quarterican-KJ`);
console.log(`JOIN : sangumee-Quarterican-KJ`)
socket.on('send:message', function (data) {
io.sockets.to('sangumee-Quarterican-KJ').emit('send:message', data.message);
console.log(data.message);
});
});
res.render('mypage/contact', {
userId: userId,
contactArray: contactArray
})
});
[客户端代码]
var socket = io.connect('http://IPADDRESS:3001');
$('#chat').on('submit', function (e) { //2
var msg = $('#message').val();
if (!msg) return;
socket.emit('send:message', {
message: msg
});
e.preventDefault();
$('#message').val('')
$('.msg_history').append(`<div class="outgoing_msg"><div class="sent_msg"><p>${msg}</p><span class="time_date"> 11:01 AM | June 9</span></div></div>`);
});
// Receive a message
socket.on('send:message', function (data) {
$('.msg_history').append(`<div class="incoming_msg"><div class="incoming_msg_img"><img src=".png" alt="sunil"></div><div class="received_msg"><div class="received_withd_msg"><p>${data}</p><span class="time_date"> 11:01 AM | June 9</span></div></div></div>`);
});
回答如下:
socket io在所有应用程序中广播消息,因此您也会收到消息。
因此,当您发送带有发件人ID和收件人ID的邮件时。
socket.emit('send:message',{message:msg,sender_id:'您的用户ID'});
每当您收到邮件时,您必须检查发件人ID并与您自己的ID匹配,如果发件人ID不匹配,请附加邮件,否则请将其留下。
socket.on('send:message',function(data){if(data.sender_id!='你的用户ID'){$('。msg_history')。append(
<div class="incoming_msg"> <div class="incoming_msg_img"><img src="https://ptetutorials/images/user-profile.png" alt="sunil"></div> <div class="received_msg"> <div class="received_withd_msg"> <p>${data}</p> <span class="time_date"> 11:01 AM | June 9</span> </div> </div> </div>
);}});