gpt4 book ai didi

angularjs - 在 socket.io 上使用 socket.id 进行私有(private)聊天

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:29 25 4
gpt4 key购买 nike

我对nodejs 和socket.io 比较陌生。我正在尝试在express框架中使用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'});
});
}

我将加载所有登录我的应用程序的用户。我想要的只是单击可用并开始私有(private)消息传递,到目前为止聊天是公开的,服务器中连接的每个人都可以看到消息。我的 angularjs Controller 代码如下:

    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 模块并将其依赖项注入(inject)到名为 chatSocket 的服务中,该服务仅返回 socketFactory。

现在我想从登录的用户列表中单击用户并开始通信。我怎样才能从(socket.id)做到这一点。哪个套接字生成或从 session ID 生成?任何人都有更好的方法来做到这一点。任何建议和回复都将受到高度赞赏。

最佳答案

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

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

然后在客户端

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

关于angularjs - 在 socket.io 上使用 socket.id 进行私有(private)聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com