在Socket.io Android客户端v1.4中处理回调函数

9

我无法找到任何有关如何在最新的 Socket.io (v1.4.3) 中正确处理 Ack 和 Events 的文档。所有现有的文章/问题都参考了旧版本,特别是 IOCallback 类。但是该类在最新版本中不存在。

到目前为止,我所能找到的只有:

获取 Socket 事件回调:

mSocket.connect();

mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        //What to do here
    }
})
  1. 我该如何处理 (Object... args) 参数?能否给出一个简单的代码示例?
  2. 看起来有十几个事件需要处理,我是否需要分别处理它们?或者说,有哪些最基本的事件可以实现以便获得连接信息?

要获取单个emit事件的回调:

mSocket.emit("payload", jsObj.toString(), new Ack() {
    @Override
    public void call(Object... args) {
        //TODO process ACK
    }
});
  1. 再次问一下,我应该如何处理 (Object... args)
2个回答

3

好的,我最终自己搞明白了。

在EVENT_CONNECT监听器的call方法中如何处理(Object... args)?

我还没有弄清楚。但我正在研究。

实现最少的一组事件以便获取连接信息

这三个方法就足够了:

connect:成功连接后触发。
connect_error:连接错误时触发。
connect_timeout:连接超时时触发。

来源:Socket.io文档

如何处理emit确认中的(Object... args) ?

所以我查看了文档并找到了这个

Server (app.js)

var io = require('socket.io')(80);
  io.on('connection', function (socket) {
    socket.on('ferret', function (name, fn) {
      fn('woot');
    });
  });

Client

socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
    socket.emit('ferret', 'tobi', function (data) {
      console.log(data); // data will be 'woot'
    });
  });

因此,参数将是服务器传递给回调函数的参数。以下是您编写上述服务器代码的Java客户端代码:

public void call(Object... args) {
  String response = (String)args[0]; //this will be woot
}

参数也可以是JSON,或者socket.io中支持的数据类型之一:

我们发送了一个字符串,但您还可以使用org.json包发送JSON数据,并且甚至也支持二进制数据!


干杯。现在继续前进。 - IntelliJ Amiya
1
@IntelliJAmiya,欢迎您对答案进行完善。SO上关于“socket.io”的帮助太少了。 - ShahiM

2

在安卓中,它的工作方式如下:

载荷可以是JSONOBJECT/JSONArray

最初的回答:

import com.github.nkzawa.socketio.client.Ack

socket.emit("EVENT_NAME", payload, Ack {
                    val ackData = it[0]
                    Logger.e(TAG, "ackData $ackData")

                })

最初的回答

服务器端

  socket.on('EVENT_NAME', (payload, callback) => {
   callback("success");
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接