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

我在nodejs和socket.io上更新鲜。 我试图在express框架中使用nodejs,socket.io和angularjs创build聊天应用程序。 我缺乏基本的想法如何聊天私人执行。到现阶段我的代码工作聊天在一组连接的用户。 这里是我的服务器代码

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); 

和我的主要套接字文件consit代码如:

 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'}); }); } 

我正在加载所有login我的应用程序的用户。 所有我想要的是点击到可用并开始私人消息传递,直到现在聊天是公开的每个人在服务器连接可以看到消息。 我的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。

现在我想从login的用户列表中单击一个用户并开始通信。 我怎么能做到这一点(socket.id)。 哪个套接字生成或从会话ID? 任何人都有更好的方式做这样的事情 任何build议和反应,高度赞赏。

基本上你需要做的是将事件发送到这样的特定套接字。

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

然后在客户端

 socket.on('privateMessage', function(data){ var message = data.message; //do stuff, display message etc... });