Angularjs Socket.io+;发送私人消息
当用户加入时,我会发回一个带有昵称和socketid的对象。然后我就能显示所有用户并发送消息 我想做的是,当单击用户名时,只向该用户发送消息。这是完整的回购协议 编辑 我更新它只是想寻求一些帮助,了解如何从包含对象的数组中获取或正确筛选socketid 我使用此选项根据单击事件筛选正确的用户: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
$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)">
您可以让单击名称的用户创建一个新房间,并向另一个用户发送一个通知,告知该用户启动了一个私人会话。如果我不能这样理解,也许我会尝试这样做。