Подтвердить что ты не робот

Подтверждение для специального события socket.io

Я ищу способ подтверждения вызова socket.emit.

socket.emit('message', msg);

Я видел механизм, в котором получатель отправит другое пользовательское событие в качестве подтверждения, но это добавит тысячи переводов в мое приложение чата. Пожалуйста, советьте эффективный метод.

4b9b3361

Ответ 1

Третий аргумент метода emit принимает обратный вызов, который будет передан на сервер, чтобы вы могли вызывать в подтверждение любые данные, которые вы пожелаете. Это на самом деле очень удобно и экономит усилия, связанные с парными событиями ответа на вызов.

Я обновляю свой ответ кодом, который я только что протестировал.

Сначала на стороне сервера:

   io.sockets.on('connection', function (sock) {

    console.log('Connected client');
    sock.emit('connected', {
        connected: 'Yay!'
    });

    // the client passes 'callback' as a function. When we invoke the callback on the server
    // the code on the client side will run
    sock.on('testmessage', function (data, callback) {
        console.log('Socket (server-side): received message:', data);
        var responseData = {
            string1: 'I like ',
            string2: 'bananas ',
            string3: ' dude!'
        };
        //console.log('connection data:', evData);
        callback(responseData);
    });
});

На стороне клиента:

console.log('starting connection...');
var socket = io.connect('http://localhost:3000');
socket.on('error', function (evData) {
    console.error('Connection Error:', evData);
});
// 'connected' is our custom message that let us know the user is connected
socket.on('connected', function (data) {
    console.log('Socket connected (client side):', data);

    // Now that we are connected let send our test call with callback
    socket.emit('testmessage', {
        payload: 'let us see if this worketh'
    }, function (responseData) {
        console.log('Callback called with data:', responseData);
    });
});