【问题标题】:Handle Callbacks in Socket.io android client v1.4在 Socket.io android 客户端 v1.4 中处理回调
【发布时间】:2023-03-10 00:18:01
【问题描述】:

我在最新的Socket.io (v1.4.3) 中找不到任何关于如何正确处理 Ack 和事件的文档。所有现有文章/问题均指较旧版本,尤其是 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)

【问题讨论】:

    标签: java android sockets callback socket.io


    【解决方案1】:

    嗯。我终于自己想通了。

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

    我还没有弄清楚。不过我在看。

    什么是我可以实施以了解连接的最佳最小事件集

    这三种方法就足够了:

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

    来源:Socket.io Docs

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

    所以我正在挖掘文档并找到this

    服务器 (app.js)

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

    客户

    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'
        });
      });
    

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

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

    参数也可以是 JSON,或者 socket.io 中的任何 supported datatypes

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

    【讨论】:

    • 干杯。现在继续前进。
    • @IntelliJAmiya 欢迎您改进答案。 SO 上的socket.io 几乎没有什么帮助。
    【解决方案2】:

    没有在 Android 中它的工作方式是这样的

    payload 可以是 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");
    });
    

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2012-01-31
      • 2017-05-18
      • 2016-04-17
      相关资源
      最近更新 更多