Я более свежую в nodejs и socket.io. Я пытаюсь сделать приложение чата, используя nodejs, socket.io и angularjs в выраженной структуре. Мне не хватает базовой идеи, как чат выполняется в частном порядке. На этом этапе мой код работает в чате в группе подключенных пользователей. Вот мой код серверачастный чат с использованием socket.id on socket.io
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'});
});
}
я Абэ, чтобы загрузить все пользователи, которые получают регистрируемые в мое приложение. все, что я хочу, - это щелкнуть мышью на доступный и начать приватный обмен сообщениями, до сих пор чат является общедоступным, все подключенные к серверу могут видеть сообщение. мой код 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). какой сокет генерирует или из идентификатора сеанса? у кого-то есть лучший способ сделать это. любые предложения и ответы высоко ценятся.
я иметь отдельный JS файл в папку маршрутов, который кодирует подобен: module.exports = функция (розетка) { socket.on ('сообщение' , функция (данные) { //console.log(data); //socket.emit('message',{message:data.message}); socket.broadcast.to (data.id) .emit ('message', {'message': data.message, 'id': data.id, 'name': data.name}); // выдавать сообщение каждому подключенному к серверу }) } is'nt его правильно? я не получаю сообщение – jsgeek
Я не уверен, что 100% вы пытаетесь сделать здесь. Вы получаете сообщение, а затем используете socket.emit, а затем также используете socket.broadcast. Вы хотите отправить эту часть всем? Или только один определенный сокет? – Williz