Angularjs Socket.io+;发送私人消息

Angularjs Socket.io+;发送私人消息,angularjs,node.js,socket.io,Angularjs,Node.js,Socket.io,当用户加入时,我会发回一个带有昵称和socketid的对象。然后我就能显示所有用户并发送消息 我想做的是,当单击用户名时,只向该用户发送消息。这是完整的回购协议 编辑 我更新它只是想寻求一些帮助,了解如何从包含对象的数组中获取或正确筛选socketid 我使用此选项根据单击事件筛选正确的用户: $scope.sendLike = function(e) { var toLike = $scope.users.filter(function(e) { return e.nicknam

当用户加入时,我会发回一个带有昵称和socketid的对象。然后我就能显示所有用户并发送消息

我想做的是,当单击用户名时,只向该用户发送消息。这是完整的回购协议

编辑

我更新它只是想寻求一些帮助,了解如何从包含对象的数组中获取或正确筛选socketid

我使用此选项根据单击事件筛选正确的用户:

 $scope.sendLike = function(e) {
  var toLike = $scope.users.filter(function(e) {
    return e.nickname
  });
  var likeObj = {
    from: $scope.mynickname,
    like: toLike
  }
  socket.emit('send-like', likeObj);
}
我为我的用户返回一个数组,如下所示:

[ { nickname: 'me', socketid: '/#nadkl897dasd' } ]

我只需要返回我的socketid的值,我已经开发了一个类似的应用程序,下面是一些帮助很大的链接-

以下是我使用的代码:

var express = require('express'),
http = require('http'),
app = express(),
server = http.createServer(app),
io = require('socket.io').listen(server),
users = {};

server.listen(3002);
console.log(__dirname)

app.get('/', function (req, res) {

res.sendFile(__dirname + '/index.html')
});

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

socket.on('new user', function (data, callback) {
    if (data in users)
        callback(false);
    //if (data === 'rahul') {
    //    socket.disconnect('unauthorized'); // for unauthorised users
    //    console.log('unauthorized');
    //}
    else {

        callback(true);
        socket.nickname = data;
        users[socket.nickname] = socket;
        updateNicknames()
    }
});

socket.on('disconnect', function (data) {
    if (!socket.nickname) return;

    console.log('disconnect' + users[socket.nickname]);
    delete users[socket.nickname];
    updateNicknames()

});

function updateNicknames() {
    io.sockets.emit('username',Object.keys(users))
}

socket.on('send message', function (data) {
    //io.sockets.emit('new message', data); // used to send to everyone
    var ind = data.indexOf(' ');
    if(ind !== -1){
        var name = data.substring(0, ind);
        console.log(name);
        var msg = data.substring(ind + 1);
        console.log(msg);
        if(name in users){
            users[name].emit('whisper',{msg:msg, nick:socket.nickname});
         }
    }
});
});

如果您需要更多帮助,请务必告诉我。

为了解决这个问题,我最终使用了lodash方法。用于操纵阵列/对象的强大库。这是使用ng lodash帮助程序库

  $scope.sendLike = function(e) {
  var toLike = $scope.users.filter(function(f) {
    if(e.socketid === f.socketid)
    return f.socketid;
  });
  // $scope.socketid = e.socketid;
  var result = lodash.get(toLike, '[0].socketid');
  var likeObj = {
    from: $scope.mynickname,
    like: result
  }
  socket.emit('send-like', likeObj);
}
我的HTML

      <li class="user"
       ng-repeat="user in users track by $index">
       <a href="#" ng-click="sendLike(user)">

  • 您可以让单击名称的用户创建一个新房间,并向另一个用户发送一个通知,告知该用户启动了一个私人会话。如果我不能这样理解,也许我会尝试这样做。