【问题标题】:Socket.io: Error: Callbacks are not supported when broadcasting at Socket.emitSocket.io:错误:在 Socket.emit 广播时不支持回调
【发布时间】:2017-11-23 01:27:46
【问题描述】:

我成功地从 nodejs 服务器向 android 客户端发送了 ack,但我没有成功进行反向操作。我有这个错误:在 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];
                .....

   }
}

我可以做些什么来解决这个问题?

【问题讨论】:

    标签: android node.js sockets callback ack


    【解决方案1】:

    基本支持@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)
            })
        }
    }
    

    【讨论】:

      【解决方案2】:

      正如错误所说,“广播时不支持回调”。不过,您似乎不是在广播,因为您正试图发送给单个客户端。所以假设socket 是一个实际的client 套接字实例,您可以更改您的代码:

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

      只发送给那个人

      socket.emit('message', data, callThis); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-11
        • 2020-11-05
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        相关资源
        最近更新 更多