Socket.io: Ошибка: обратные вызовы не поддерживаются при трансляции на Socket.emit

Мне удалось отправить подтверждение клиенту Android с сервера nodejs, но мне не удалось сделать обратное. У меня есть эта ошибка: обратные вызовы не поддерживаются при трансляции в Socket.emit

Серверные узлы:

socket.broadcast.to(socketid).emit('message', data, callThis); 
//this function is executed when client calls it
 function callThis (dataFromClient){
console.log("Call back fired: " + dataFromClient);
 }

клиент андроид:

   socket.on("message", new Emitter.Listener() {

            @Override
            public void call(Object... args) {

                Ack ack = (Ack) args[args.length - 1];
                ack.call();

                JSONObject data = (JSONObject) args[0];
                .....

   }
}

Что я могу сделать, чтобы решить эту проблему?


person Réda Youssoufi    schedule 20.06.2017    source источник


Ответы (2)


В основном поддержите ответ @Xeoncross. Когда пришло соединение, просто сохранил сокет в карту, как показано ниже

this.connections = new Map<string, SocketIO.Socket>()
this.server.on("connection", (socket: SocketIO.Socket) => {
      this.connections.set(socket.id, socket)
})

Затем используйте цикл для отправки всех пользователей по отдельности.

public broadcast(msg: string) {
   for(const socket of this.connections.values()) {
        socket.emit("block", msg, (confirm: string) => {
             console.log("confirmation msg: ", confirm)
        })
    }
}
person Wei Tang    schedule 22.05.2019

Как говорится в ошибке, "Обратные вызовы не поддерживаются при трансляции". Однако это не похоже на то, что вы транслируете, поскольку пытаетесь отправить одному клиенту. Итак, предполагая, что socket является фактическим экземпляром сокета client, вы можете изменить свой код:

socket.broadcast.to(socketid).emit('message', data, callThis); 

просто отправить этому человеку

socket.emit('message', data, callThis); 
person Xeoncross    schedule 10.05.2018