Angularjs 使用socket.io上的socket.id进行私人聊天

Angularjs 使用socket.io上的socket.id进行私人聊天,angularjs,node.js,express,socket.io,Angularjs,Node.js,Express,Socket.io,我对nodejs和socket.io比较熟悉。我正在尝试在express framework中使用nodejs、socket.io和angularjs创建一个聊天应用程序。我对如何私下聊天缺乏基本概念。到目前为止,我的代码在一组连接的用户中进行聊天。这是我的服务器代码 var server = require('http').Server(app); var io = require('socket.io')(server); var socket = require('./routes/soc

我对nodejs和socket.io比较熟悉。我正在尝试在express framework中使用nodejs、socket.io和angularjs创建一个聊天应用程序。我对如何私下聊天缺乏基本概念。到目前为止,我的代码在一组连接的用户中进行聊天。这是我的服务器代码

var server = require('http').Server(app);
var io = require('socket.io')(server);
var socket = require('./routes/socket.js');
server.listen(8000);
console.log('server listening on port:8000');
io.on('connection',socket);
我的主套接字文件包含如下代码:

module.exports = function(socket){   
console.log('connected'+' '+'socketId :'+socket.id);     
//console.log(req.session.id);
var users =[];
socket.emit(socket.id);

socket.on('username',function(data){
    users.push({id:socket.id,message:data.username});        
    socket.emit('username', users)

})      
  socket.on('typing',function(data){
    //socket.emit('typing',{message:"helo angular"});
    socket.broadcast.emit('typing',{message:data.message});
});
  socket.on('typing-stop',function(data){
    //socket.emit('typing',{message:"helo angular"});
    debugger;
    socket.broadcast.emit('typing-stop',{message:data.message});
});
socket.on('new-user',function(data){
    socket.emit('new-user',data);
    socket.broadcast.emit('new-user',data);
})   

socket.on('message',function(data){
    users.push({message:data.message});        
    socket.emit('message',{id:socket.id,message:data.message});
    socket.broadcast.emit('message',{id:socket.id,message:data.message});// emit the message to every one connected in server
})

socket.on('disconnect',function(){
        console.log('user disconnected');          
      socket.broadcast.emit('disconnected',{'message':'user left the chat room'});
    });
 }
我可以加载所有登录我的应用程序的用户。 所有我想要的是点击可用的,并开始私人消息,到现在为止,聊天是公共的,在服务器上连接的每个人都可以看到消息。 我的angularjs控制器代码如下:

    function orgController(notifyService, chatSocket, $state,$http) {
    chatSocket.connect();

    var vm = this;
    vm.sendMessage = sendMessage;
    vm.messages = [];
    vm.users = [];      

    var id = $state.params.id;
    $http.get('/users/' + id).then(function(result) {
    console.log(result.data);
    vm.userData = result.data;
    chatSocket.emit('new-user', { 'username': result.data.details.firstName             + ' ' + result.data.details.lastName });
     });
      chatSocket.on('new-user',function(data){
    vm.users.push(data);
    })
    function sendMessage(msg) {
    //console.log(msg);
    if (msg != null && msg != '') {
        chatSocket.emit('message', { message: msg });
        vm.msg = '';
    } else {
        vm.msg = '';
    }
    }
    chatSocket.on('message', function(data) {
    //debugger;
    console.log(data);
    vm.messages.push(data);
    });
}
注意:我已经包括angular-socket.io模块,并将其依赖项注入到名为chatSocket的服务中,该服务只返回socketFactory


现在我想从登录的用户列表中点击一个用户并开始通信。如何从(socket.id)执行此操作。哪个套接字生成或来自会话id?任何人都有更好的方法来做到这一点。非常感谢您的任何建议和响应。

基本上,您需要做的是向这样的特定套接字发出事件

io.to(socket.id).emit('privateMessage', {message: <message goes here>});

我在routes文件夹下有一个单独的js文件,代码如下:module.exports=function(socket){socket.on('message',function(data){//console.log(data);//socket.emit('message',{message:data.message});socket.broadcast.to(data.id).emit('message',{'message','message':data.message,'id','name'):data.name});//将消息发送给服务器中连接的每个人})它是否正确?我没有得到消息,我不确定100%你想在这里做什么。您正在接收一条消息,然后使用socket.emit,然后还使用socket.broadcast。您想将此部分发送给所有人吗?还是只有一个插座?
socket.on('privateMessage', function(data){
  var message = data.message;
  //do stuff, display message etc...
});