2014-10-10 17 views
5

Tiếp theo là các mã ở phía trước, nơi storeSelUserId chứa user_id để gửi message-Gửi thông báo cập nhật cho người dùng đặc biệt là sử dụng socket.io

FYI - Node Version 1.1.0

// Socket Notification 
var socket = io('http://localhost:6868'); 
socket.on('connection', function (data) { 
    socket.emit('send notification', { sent_to: storeSelUserId }); 
}); 

Sau đây là mã máy chủ trong các tệp tuyến đường -

var clients = {}; 
io.on('connection', function (socket) { 
    socket.emit('connection', "Connection Created."); 
    socket.on('send notification', function (sent_to) { 
    console.log(sent_to); 
    }); 
}); 

Trong bảng điều khiển sent_to đang hiển thị mảng của user_id.

Bây giờ, hãy bắt đầu bằng socket.io Tôi đã mắc kẹt với giải pháp làm cách nào để gửi thư đến những người dùng cụ thể này.

tôi tìm kiếm và phát hiện ra rằng tôi cần phải đẩy mỗi người dùng với ổ cắm của nó vì vậy tôi cải nó -

var users = []; 
io.on('connection', function (socket) { 
    users.push({socket_id: socket.id}); 
    socket.emit('connection', "Connection Created."); 
    socket.on('send notification', function (sent_to) { 
    console.log(sent_to); 
    }); 
}); 

Nhưng tôi đang ở tình trạng khó xử đó khác tôi cần phải làm gì để ghi nhận những user_id đề cập đến đó socket_id và sau đó cập nhật div của người dùng với id cụ thể đó?

EDIT -

Thêm điều khiển - (Front End)

cuối giao diện Mặt trận nơi ghi nhớ được tạo ra và gửi cho người dùng đặc biệt

var socket = io('http://localhost:6868'); 
socket.on('connection', function (data) { 
    socket.emit('send memo notification', {creator_id: creator_id, sent_to: [Array of user_ids to whom memo to send]}); 
}); 

khiển Dashboard - (Giao diện người dùng)

Giao diện Mặt trận cuối cùng mà đếm thông báo để hiển thị "notificationCount"

if (SessionService.currentUser._id) { 
    var socket = io('http://localhost:6868'); 
    socket.on('connection', function (data) { 
     socket.emit('get notifications', {user_id: SessionService.currentUser._id}); 
    }); 

    socket.on('notification data', function(data){ 
     console.log("-- Not Data Test -"); 
     $scope.notificationCount = data.length; 
    }); 
} 

Mã ở cuối máy chủ -

io.on('connection', function (socket) { 

    socket.emit('connection', "Connection Created."); 

    socket.on('send memo notification', function(data) { 
     notifications.createNotification(data); 
    }); 

    socket.on('get notifications', function(data){ 
    notifications.getNotifications(data, function(response){ 
     socket.emit('notification data', response.data); 
    }); 
    }); 

}); 

Backend mã điều khiển -

exports.getNotifications = function(data, callback) { 
    var userId = data.user_id; 
    Notification.find({receiver_id: userId}, function(err, response){ 
     if (err) 
      callback({"message": "error", "data": err, "status_code": "500"}); 
     else 
      callback({"message": "success", "data": response, "status_code": "200"}); 
    }); 
}; 

exports.createNotification = function(data) { 
    var notificationData = data; 
    var x = 0; 
    for(var i=0; i< notificationData.length; i++) { 
     // Code 
     Notification(notificationData[i]).save(function(err,response){ 
      if (err) 
       return false; 
     });  
     if (x === notificationData.length - 1) { 
      return true; 
     } 
     x++; 
    } 
}; 

Trả lời

18

Nếu bạn muốn sử dụng id người dùng của riêng mình thì không có cách nào xung quanh ánh xạ id ổ cắm với id người dùng. Tôi giả sử một khách hàng biết id người dùng của nó từ một nơi nào đó, vì vậy nó có thể gửi id người dùng của nó đến máy chủ sau khi kết nối.

Khách hàng

socket.on('connection', function (data) { 
    socket.emit('setUserId', myUserId); 
}); 

Các máy chủ tiết kiệm ổ cắm cho mỗi user id.

socket.on('setUserId', function (userId) { 
    users[userId]=socket; 
}); 

Nếu bạn có bản đồ như vậy trong máy chủ, bạn có thể gửi thư cho khách hàng này bằng id người dùng.

socket.on('send notification', function (userId) { 
    users[userId].emit('notification', "important notification message"); 
}); 

Chỉnh sửa: Lưu trực tiếp ổ cắm tương ứng thậm chí còn tốt hơn.

+1

Hãy tìm edit..I của tôi không nhận được cập nhật tự động trên side..I khách hàng phải refresh lại trình duyệt sau đó chỉ cập nhật phản ánh – Trialcoder

+0

Hãy cho tôi biết nếu có điều gì đó vẫn chưa rõ ràng – Trialcoder

3

Theo những gì tôi hiểu, bạn cần thông báo riêng tư chỉ gửi cho một số người dùng. Đối với điều đó, lưu tên người dùng của bạn mà bạn muốn gửi và ổ cắm tương ứng của họ trong các băm khác nhau.

username [socket.name] = username to be added; 
usersocket [ socket.name ] =socket; 

Sau đó, để phát ra những thông điệp để chỉ người dùng đó, sử dụng

usersocket[ socket.name ].emit('event for send message', ' what you want to send '); 
+0

Nếu bạn muốn, tôi có thể gửi mã. –

+0

Vui lòng tìm chỉnh sửa của tôi – Trialcoder

+0

Bạn có thể chuyển tiếp bản cập nhật để tôi có thể tìm kiếm nó không ?? –

Các vấn đề liên quan