在 Socket.io android 客户端 v1.4 中处理回调
Posted
技术标签:
【中文标题】在 Socket.io android 客户端 v1.4 中处理回调【英文标题】:Handle Callbacks in Socket.io android client v1.4 【发布时间】:2016-04-29 14:09:07 【问题描述】:我在最新的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
)
-
如何处理
(Object... args)
。一个小的代码示例会很棒。
似乎有十几个事件,我必须单独处理所有这些吗?或者,我可以实施哪些最小的事件集以了解连接?
获取个别emit
事件的回调:
mSocket.emit("payload", jsObj.toString(), new Ack()
@Override
public void call(Object... args)
//TODO process ACK
);
-
同样,我应该如何处理
(Object... args)
?
【问题讨论】:
【参考方案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");
);
【讨论】:
以上是关于在 Socket.io android 客户端 v1.4 中处理回调的主要内容,如果未能解决你的问题,请参考以下文章
在 Socket.io android 客户端 v1.4 中处理回调
Android 客户端未从 node.js 服务器接收到 socket.io 消息