/ / Sprawdź, czy klient otrzymał wiadomość z serwera - node.js, socket.io

Sprawdź, czy klient otrzymał wiadomość z serwera - node.js, socket.io

W usłudze czatu, którą buduję, muszę wysyłać wiadomości bezpośrednio z serwera.

Nie znalazłem rozwiązania, w dokumentacji jest przykład:

// SERVER
io.sockets.on("connection", function (socket) {
socket.on("ferret", function (name, fn) {
fn("woot");
});
});

// CLIENT
socket.on("connect", function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
socket.emit("ferret", "tobi", function (data) {
console.log(data); // data will be "woot"
});
});

ale robi coś przeciwnego do tego, czego potrzebuję!

Muszę zrobić emit z serwera i otrzymaj potwierdzenie odbioru od klienta!

Czy jest jakiś sposób na zrobienie tego?

Odpowiedzi:

1 dla odpowiedzi № 1

nie ma gwarancji, ponieważ połączenie może byćzabity, zanim wiadomość serwera dotrze do klienta. dlatego też na serwerze nie ma zdarzenia takiego jak „clientGotMessage”. jeśli wiadomość MUSI dotrzeć do użytkownika, nie ma innego sposobu niż powiadomienie serwera, że ​​wiadomość została odebrana na kliencie.

Możesz to zrobić „łatwo”, wysyłając numer w dół. klient i serwer śledzą ten numer. za każdym razem, gdy serwer wysyła, liczy się, za każdym razem, gdy klient odbiera, liczy się. Gdy klient coś wysyła, wysyła numer, więc serwer sprawdzi, czy klient ma wszystko. Jeśli klient pominął wiadomość, następna wiadomość będzie miała numer, którego klient nie zaakceptuje i zażąda utraconej wiadomości od serwera.