一尘不染

与socket.io私人聊天

node.js

我的聊天应用程序遇到问题,我需要能够向特定用户发送私人消息,我可以选择该特定用户,但由于某些原因无法弄清楚如何发送私人消息。

在下面,您将找到我服务器的代码,请提供帮助:

var express = require('express');

var app = express();

var PORT = process.env.PORT || 8000;

var http = require('http').Server(app); // this is a node server that uses express as the boiler plate

var io = require('socket.io')(http); // socket! pass our server as a parameter to it





// use express static to expose a folder

app.use(express.static(__dirname + '/public'));



var users = [],

    connections = [];

var onlineClients = {};









// Register events on socket connection

io.on('connection', function(socket){

    connections.push(socket);

    // console.log("connected socket", connections);



    socket.on("disconnect", function() {

        users.splice(users.indexOf(socket.username), 1);

        updateUsernames();

        connections.splice(connections.indexOf(socket), 1);

        console.log("disconnected socket", connections.length)

    });



    socket.on("send message", function(data) {

        // console.log(data);

        io.emit("new message", {msg: data, user: socket.username});

    });





    socket.on("notify user", function(data) {

        io.emit("notify user", {user: socket.username})

    });





    socket.on("new user", function(data) {

        socket.username = data;

        users.push(socket.username);

        updateUsernames();



    });



    function updateUsernames() {

        io.emit("get users", users);

    };



    socket.on("private", function(data, recipientName) {

        var recipient = connections.filter(function (recipient) {

            return recipient.username === recipientName;

        })[0];

            console.log(recipient.id);

            console.log(data);

        io.sockets.socket(recipient.id).emit("received private msg", data);



    });





    // socket.on("create room", function(room) {

    //  socket.join(room);

    //  io.sockets.in(room).emit('event', "hey wusup am in this room");

    //  console.log(socket);



    // })



});



http.listen(PORT, function(){

  console.log('Server started on port ' + PORT);

});

阅读 244

收藏
2020-07-07

共1个答案

一尘不染

  • 首先在聊天室中添加用户,以便在您的私人聊天室中轻松找到用户
  • 您用于加入私人会议室的客户端代码

    <input type="text" class="form-control" id="user_email" placeholder="user_email"  />
    

  • 您在客户端的JavaScript代码

    function a(){
    io.emit('privatechatroom', {email:document.getElementById('user_email').value});
    

    }

  • 您的服务器端代码以在您的房间中添加用户

    socket.on('privatechatroom',function(data){
    socket.join(data.email);
    io.emit('res',{mes:"you are added"})
    

    });

现在您可以向最近添加到此会议室客户端的那个人发送私人消息

function b() {
    io.emit('sendmail', { email: document.getElementById('sender_mail').value, message: document.getElementById('message').value });
    $('#message').val('');
}



/*serverside code*/
socket.on('sendmail', function (data) {
    io.sockets.in(data.email).emit('new_msg', { msg: data.message });
    console.log(data.email);
});
2020-07-07