首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的应用程序中添加私人聊天功能(Node js)

问在我的应用程序中添加私人聊天功能(Node js)
EN

Stack Overflow用户
提问于 2020-11-12 12:54:41
回答 1查看 100关注 0票数 1

我最近开始学习Node js,并开发了一个实时聊天应用程序,任何连接到服务器的人都可以进行聊天,但现在我想添加一个只在两个用户之间进行私人聊天的功能,那么我如何实现它呢?我读过socket.io的聊天室功能,但我知道它是一个房间,在这个房间里可以有许多用户,他们可以聊天,但这不是个人手段,许多用户可以加入同一聊天。我需要知道如何实现聊天功能,其中两个人可以进行聊天,没有第三个人可以进入那个特定的聊天。我的问题与这里提出的其他问题不同,因为我想在一个应用程序中同时实现我需要的群组和私人聊天功能。我的想法是在我的群聊功能中显示用户名和消息,所以如果一个用户点击用户名,那么这个人就可以开始他们的个人私人聊天,第三个人不能加入。

在这里,我分享了我的代码片段,供您参考

Server.js

代码语言:javascript
复制
  const io = require('socket.io')(http)

io.on('connection', (socket) => {
    console.log('Connected...')
    socket.on('message', (msg) => {
        socket.broadcast.emit('message', msg)
    })

})

Client.js

代码语言:javascript
复制
   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
}

请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2020-11-12 13:12:38

当新用户加入保持该套接字id,且在发送消息时仅向该套接字发送该唯一用户id和发送消息时,

代码语言:javascript
复制
    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)
        });
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64798159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档