围绕着 Socket.io 客户 API

Wrapping my head around Socket.io Client API

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

现在我正在尝试 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 提供一般性答案。

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

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

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

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