处理Socket.io android客户端v1.4中的回调

Sha*_*hiM 8 java sockets android callback socket.io

我无法找到关于如何正确处理Ack和事件的任何文档Socket.io(v1.4.3).所有现有文章/问题都涉及旧版本,尤其是IOCallback课程.但是最新版本中没有该类.

我设法找到的所有内容是这样的:

要获取Socket事件的回调:

mSocket.connect();

mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        //What to do here
    }
})
Run Code Online (Sandbox Code Playgroud)
  1. 我该如何处理(Object... args).一个小代码示例会很棒.
  2. 似乎有十几个事件,我是否必须单独处理所有这些事件?或者,我可以实现哪些最佳事件集来了解连接?

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

mSocket.emit("payload", jsObj.toString(), new Ack() {
    @Override
    public void call(Object... args) {
        //TODO process ACK
    }
});
Run Code Online (Sandbox Code Playgroud)
  1. 再说一遍,我该如何处理(Object... args)

Sha*_*hiM 3

出色地。我终于自己弄清楚了。

如何处理(Object... args)EVENT_CONNECT侦听器的方法call

我还没弄清楚。但我正在寻找。

我可以实现哪些最少的事件集来了解连接情况

这三种方法就足够了:

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

来源:Socket.io 文档

我应该如何处理(Object... args)发出确认?

所以我仔细研究了文档并发现了这个

服务器(app.js)

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

客户

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'
    });
  });
Run Code Online (Sandbox Code Playgroud)

因此 args 将是服务器作为参数发送到回调中的任何内容。Java这就是为上述服务器代码编写客户端代码的方式:

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

参数也可以是 JSON,或 socket.io 中任何支持的数据类型

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