1

通常,当我们使用 HTTP 请求时,我们会在请求成功/失败时调用一组特定的方法/回调。每个连接请求都可以有自己的回调方法,这使得代码的结构变得非常容易。

所以现在我正在为一个新项目尝试 Socket.io,我感到很困惑。例如,您向套接字连接发出一条消息,然后就完成了。那里没有回调。没有简单的方法可以知道这是否真的成功了我已经设法通过编写这个方法来模拟回调:

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. 但这就是我所拥有的。我不知道如何处理特定发射的错误,以便更新 UI 或通知用户 .etc。

当然,有一些回调事件,Socket但这些事件不可能连接到应用程序流中。

那么有人知道实现这一目标的方法吗?我搜索了很多,但找不到任何东西。我正在使用 Java 客户端,但欢迎任何客户端 API 的通用答案。

4

1 回答 1

1

你必须改变你的观点——而不是回调考虑事件,并相应地基于你的设计。

当您向套接字服务器发出请求时,生成一个唯一令牌。将令牌发送到服务器并让服务器将其与请求响应一起发回。使用令牌,您可以注册一个回调,该回调将触发匹配请求响应事件和此令牌的事件。

这样您就可以一个接一个地执行调用。

为了涵盖服务器没有返回响应的情况,我们使用 30 秒的超时。大约 99.9% 的时间我们没有得到响应是因为套接字断开连接,所以套接字错误回调在重新连接成功后处理了这个问题,没有达到超时。

于 2016-01-28T07:32:15.427 回答