node.js - 在我的应用程序中添加私人聊天功能(Node js)
问题描述
我最近开始学习 Node js 并开发了一个实时聊天应用程序,无论谁连接到服务器,他们都可以聊天,但现在我只想在两个用户之间添加一个私人聊天功能,那么我该如何实现呢?我已经阅读了 socket.io 的房间功能,但我可以知道它是一个房间,在那个房间里可以有很多用户,他们可以聊天,但这不是个人的,这意味着很多用户可以加入同一个聊天。我需要知道如何实现两个人可以聊天的聊天功能,第三人不能进入该特定聊天。我的问题与这里提出的其他问题不同,因为我想在一个应用程序中同时实现我需要的群组和私人聊天功能。
在这里我分享我的代码片段供您参考
服务器.js
const io = require('socket.io')(http)
io.on('connection', (socket) => {
console.log('Connected...')
socket.on('message', (msg) => {
socket.broadcast.emit('message', msg)
})
})
客户端.js
const socket = io()
let name;
let textarea = document.querySelector('#textarea')
let messageArea = document.querySelector('.message__area')
do {
name = prompt('Please enter your name: ')
} while(!name)
textarea.addEventListener('keyup', (e) => {
if(e.key === 'Enter') {
sendMessage(e.target.value)
}
})
function sendMessage(message) {
let msg = {
user: name,
message: message.trim()
}
// Append
appendMessage(msg, 'outgoing')
textarea.value = ''
scrollToBottom()
// Send to server
socket.emit('message', msg)
}
function appendMessage(msg, type) {
let mainDiv = document.createElement('div')
let className = type
mainDiv.classList.add(className, 'message')
let markup = `
<h4>${msg.user}</h4>
<p>${msg.message}</p>
`
mainDiv.innerHTML = markup
messageArea.appendChild(mainDiv)
}
// Recieve messages
socket.on('message', (msg) => {
appendMessage(msg, 'incoming')
scrollToBottom()
})
function scrollToBottom() {
messageArea.scrollTop = messageArea.scrollHeight
}
请帮帮我!
解决方案
当新用户加入时保留该套接字 ID,并在发送消息时发送该唯一用户 ID 并仅向该套接字发出消息,
const io = require('socket.io')(http)
var user={};
io.on('connection', (socket) => {
console.log('Connected...')
socket.on('join', (userid) => {
users[userid]=socket.id;
});
socket.on('privateMessage', (data) => {
io.sockets.socket(users[data.to]).emit('message', data.msg);
});
socket.on('publicMessage', (msg) => {
socket.broadcast.emit('message', msg)
});
});
推荐阅读
- git - Git 使用 jenkins 管道拉取远程服务器
- mouseevent - 这种鼠标行为的名称是什么?
- apache-spark - 使用列值作为 spark DataFrame 函数的参数
- r - 如何组合逻辑向量?
- java - 在android studio中使用react-native编译android时出错
- android - 在不活动时释放 LiveData
- python - Pyqt5 QComboBox 下拉菜单文本重叠
- html - Re-ordering grid items
- macos - 即时查询 HFS 或 APFS 卷上的文件和文件夹总数
- javascript - 具有非捕获组的 Javascript 正则表达式作为两种选择