Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Socket.io:错误:在Socket.emit上广播时不支持回调_Android_Node.js_Sockets_Callback_Ack - Fatal编程技术网

Android Socket.io:错误:在Socket.emit上广播时不支持回调

Android Socket.io:错误:在Socket.emit上广播时不支持回调,android,node.js,sockets,callback,ack,Android,Node.js,Sockets,Callback,Ack,我成功地从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

我成功地从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);
 }
客户端android:

   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];
                .....

   }
}

我能做些什么来解决这个问题

正如错误所说,广播时不支持回调。不过,看起来您并不是在广播,因为您正在尝试向单个客户端发送。因此,假设套接字是实际的客户端套接字实例,您可以更改代码:

socket.broadcast.to(socketid).emit('message', data, callThis); 
只发送给那个人

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

基本上支持@Xeoncross的答案。当连接到来时,只需将套接字保存到映射中,如下所示

this.connections=新地图 this.server.onconnection,socket:SocketIO.socket=>{ 此.connections.setsocket.id,插座 } 然后使用循环分别发送所有用户

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