通常,当我们使用HTTP请求时,我们会有一组特定的方法/回调,当请求成功/失败时会调用这些方法/回调。每个连接请求都可以有自己的回调方法,这使得代码的结构非常容易。
所以现在我正在尝试Socket.io进行一个新项目,我感到很困惑。例如,您将一条消息发送到套接字连接,并且您已完成。那里没有回调。没有 easy 的方法我知道这是否真的成功了我通过编写这个方法来设法模拟回调:
public void emitRequest(final String event, JSONObject data, final emitResponseListener pListener)
{
mSocket.on(event+"_resp", new Listener() {
@Override
public void call(final Object... args) {
((Activity)c).runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
if (pListener!=null)
{
pListener.onResponseRecieved(data);
}
}
});
}
});
mSocket.emit(event,data);
}
此方法在发出event
后从服务器侦听event
_ resp消息。但就我而言。我不知道如何处理特定发出的错误,以便更新UI或通知用户。等。
当然,Socket
有回调事件,但这些事件无法连接到应用流程中。
那么有人知道实现这个目标的方法吗?我搜索了很多但却找不到任何东西。我使用Java客户端,但欢迎任何客户端API的一般化答案。
答案 0 :(得分:1)
您必须更改视图 - 而不是回调考虑事件,并相应地设计您的设计。
向套接字服务器发出请求时,生成唯一令牌。将令牌发送到服务器并让服务器将其与请求响应一起发回。使用令牌,您可以注册一个回调,该回调将触发与请求响应事件和此令牌匹配的事件。
这样你就可以一个接一个地执行调用。
要覆盖服务器未返回响应的情况,我们使用30秒的超时。由于套接字断开,我们没有得到响应的时间大约有99.9%,因此套接字错误回调在成功重新连接后处理,没有达到超时。