socket.emit(‘событие’, сообщение, обратный вызов )

#javascript #reactjs #socket.io

#javascript #reactjs #socket.io

Вопрос:

Я следил за учебным пособием YouTube, в котором функция обратного вызова передается с помощью socket.emit, обратный вызов изменяет одно из состояний компонента

     socket.emit('event', message, () => changeState())
  

на стороне сервера вызывается этот обратный вызов

  socket.on('event', (message, callback) => {
    // some code
    callback()
})
  

как это работает?
Как можно изменить состояние, вызвав обратный вызов на стороне сервера?
Это неправильно или я не знаю о какой-то функциональности?

Комментарии:

1. Я использую его много, это очень удобно .. совет проверьте его функцию, иначе, если ее нет, это приведет к сбою сервера: if (typeof callback === 'function') callback()

Ответ №1:

 socket.emit(eventName[, …args][, ack])
  

Вы не передаете обратный вызов ( ack ) на сервер, это обратный вызов, который вызывается с ответом сервера. Смотрите связанные документы (клиент):

Аргумент ack является необязательным и будет вызван с ответом сервера.

И на сервере:

Аргумент ack является необязательным и будет вызван с ответом клиента.

Итак, в основном в вашем примере он просто не использует аргумент ответа сервера, другими словами: «установить состояние для ответа сервера».

 // Client
socket.emit('event', message, (serverResponse) => change())

// Server, callback is **NOT** the callback above.
socket.emit('event', message, (clientResponse) => callback())
  

Комментарии:

1. таким образом, функция с сервера отправляется как сообщение подтверждения, и выполняется обратный вызов на стороне клиента (поскольку клиент отправил событие, как в qns)??

2. таким образом, сообщение ack фактически отправляется с сервера, который при получении клиентом выполняет его обратный вызов.