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

Успешный обратный вызов для метода emit в socket.io

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

Для обратного вызова ошибки я использовал Exposed events doc и получил его работу

socket.on('error', () -> console.log("Error Occured"))

Для успеха я пробовал

socket.emit('my custom method', {content: json},() -> console.log("Emitted"))

Этот обратный вызов никогда не запускается независимо от того, был ли он успешным или неудачным.

Как я могу получить обработчик успеха?

4b9b3361

Ответ 1

Если вы посмотрите на документы, вы увидите пример передачи функции обратного вызова -2nd. Последний пример: http://socket.io/docs/#Sending-and-getting-data-acknowledgements

Ex сервер:

    socket.on('formData', 
              function(data, fn){
                      // data is your form data from the client side
                      // we are here so we got it successfully so call client callback
                      // incidentally(not needed in this case) send back data value true 
                      fn(true);
              }
             );

клиент:

      socket.emit('formData', 
                  data, 
                  function(confirmation){
                          // send data
                          // know we got it once the server calls this callback      
                          // note -in this ex we dont need to send back any data 
                          // - could just have called fn() at server side
                          console.log(confirmation);
                  }
                 );

Ответ 2

Причина, по которой ваш второй код ничего не делает, состоит в том, что открытые события в socketIO просто определены для методов socket.on. Поэтому вам нужно добавить еще один emit в ваш сервер app.js, чтобы выполнить этот

Клиент испускает настраиваемое сообщение и отправляет данные JSON в сокет через socket.emit, также он получает функцию обновления, которая обрабатывает обратный вызов успеха

socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
 //do stuff here
});

Серверная сторона Получает вызов из сообщения, испускаемого клиентом, и передает сообщениеSuccess обратно клиенту

socket.on ('message', function (data) {
 io.sockets.emit ('messageSuccess', data);
});

Возможно, вы можете сделать модуль из этого поведения, поэтому вы можете прикрепить его для каждого сообщения, которое вы хотите обработать таким образом.