验证客户端是否已从服务器收到消息

时间:2014-05-01 10:15:37

标签: node.js socket.io

在我正在构建的聊天服务中,我需要直接从服务器发送消息。

我找不到解决方案,文档中有一个例子:

// 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'
    });
});

但与我需要的相反!

我需要从服务器执行emit并从客户端收到确认收据!

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

无法保证在服务器消息到达客户端之前可以终止连接。因此服务器上也没有像“clientGotMessage”那样的事件。如果消息必须到达用户,除了告诉服务器您在客户端上收到消息之外别无他法。

您可以通过发送号码来“轻松”完成此操作。客户端和服务器跟踪该号码。每次服务器发送时,它都会计数,每次客户端收到时,它都会计数。当客户端发送内容时,它会发送号码,因此服务器将查看客户端是否拥有所有内容。如果客户端错过了一条消息,则下一条消息将包含客户端不会接受的号码,并从服务器请求丢失的消息。