2011-10-31 40 views
8

Tôi đang sử dụng node.js và socket.io để tạo một ứng dụng trò chuyện. Làm thế nào để gửi tin nhắn đến ổ cắm khác, tôi biết id của ổ cắm hoặc tên người dùng chỉ. Không có phòng, khách hàng trò chuyện trực tiếp với nhau.Gửi tin nhắn đến một ổ cắm duy nhất

Trả lời

21

Với Socket.IO, bạn không bị giới hạn chỉ sử dụng đối tượng ổ cắm trong hàm gọi lại của hàm kết nối. Bạn có thể tạo một đối tượng lưu trữ đối tượng socket cho một tên người dùng cụ thể và tra cứu socket để gửi một thông điệp đến khi một client phát ra một thông điệp. Bạn sẽ cần phải truyền tải mục tiêu dự định với mọi thông báo.

Ví dụ:

var sockets = {}; 

... 

io.on('connection', function(socket){ 
    socket.on('set nickname', function (name) { 
     sockets[name] = socket; 
    }); 
    socket.on('send message', function (message, to) { 
     sockets[to].emit(message); 
    }); 
}); 

Xem thêm các ví dụ trên examples page of Socket.IO's website.

+0

lớn, đó là giải pháp –

+0

Làm thế nào để xử lý "thành" được không thuộc về bất cứ nickname? Ví dụ; Biệt hiệu "A" được gửi thông điệp tới Biệt hiệu "B", Biệt hiệu "B" sẽ gửi thư đến Biệt hiệu "C". Và không có biệt hiệu "C" Sau đó đưa ra lỗi = "không thể đọc thuộc tính 'phát ra' không xác định" – drojokef

0

Bạn có thể kiểm tra tài sản tên người dùng của tất cả các ổ cắm như thế này:

socket.on('send message', function(message,to){ 

    io.sockets.clients().forEach(function (socket) { 

     if (socket.username==to){socket.emit(message);} 

    }); 

}); 
Các vấn đề liên quan