Câu hỏi node.js socket.io Làm thế nào để phát ra một máy khách cụ thể?


Tôi muốn "phát ra" một tin nhắn cho một khách hàng cụ thể được chọn dựa trên một tin nhắn khác nhận được trong một ứng dụng khách khác, Làm cách nào để làm điều này?

Tôi đang nghĩ đến việc gia nhập mỗi khách hàng với "phòng riêng" của họ và sau đó phát sóng. Có cách nào tốt hơn?


22
2018-04-11 16:50


gốc




Các câu trả lời:


CẬP NHẬT cho socket.io phiên bản 1.0 trở lên

io.to(socketid).emit('message', 'whatever');

Đối với phiên bản cũ hơn:

Bạn có thể lưu trữ mỗi máy khách trong một đối tượng như một thuộc tính. Sau đó, bạn có thể tra cứu socket dựa trên thông báo:

var basket = {};

io.sockets.on('connection', function (socket) {
  socket.on("register", function(data) {
    basket[data.nickname] = socket.id;
  });
  socket.on("privmessage", function(data){
    var to = basket[data.to];
    io.sockets.socket(to).emit(data.msg);
  });
});

Chưa được thử nghiệm ... nhưng nó sẽ cho bạn ý tưởng


29
2018-04-11 17:47



Làm thế nào nó hoạt động với reddiss? Tôi muốn làm điều tương tự nhưng trong môi trường cân bằng tải phân tán. - budsiya
cho phiên bản 1.0, chúng ta cần sử dụng io.to (socketId) .emit ('pm', {}); như @Minho Lee nói - Beast
@budsiya bạn đã bao giờ làm cho nó hoạt động chưa? Tôi đang làm việc trên một vấn đề tương tự, nơi tôi có nhiều quá trình nút chạy trên một máy chủ duy nhất. - Daniel Que
@budsiya, ý bạn là redis ? - Steel Brain
@Francesco Điều này rất hay nhưng bạn nên mở rộng ví dụ, để giúp người ăn xin nắm bắt được khái niệm. Hoặc cung cấp một số liên kết - slevin


Để sử dụng phiên bản socket.io 1.0:

io.to(socketid).emit('message', 'whatever');

18
2017-07-13 11:14





Phát ra cho một khách hàng cụ thể bằng cách sử dụng một socketID.

Máy chủ / gói: socket.io:

io.to(socketID).emit('testEvent', 'yourMessage');

Ứng dụng khách / gói socket.io-client:

io.sockets.on('connection',(socket) => {
  socket.on("testEvent", data => {
    console.log(data);
  });
});

Bạn có thể truy cập socketID theo cách sau:

io.on('connection', (socket, next) => {
    const ID = socket.id // id property on the socket Object
})

Nó chỉ đơn giản là một tài sản trên socket vật


0
2017-08-27 21:34