【问题标题】:Wrapping my head around Socket.io Client API围绕着 Socket.io 客户端 API
【发布时间】:2016-01-26 22:57:56
【问题描述】:

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

当然,Socket 有回调事件,但这些事件无法连接到应用程序流中。

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

【问题讨论】:

    标签: sockets callback socket.io socket.io-1.0 socket.io-java-client


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好主意。但是,如果那个回应从未出现怎么办。我怎么知道有错误?
    • 嗯......你不知道。我们使用 30 秒的超时时间,但大约 99.9% 的时间我们没有得到响应是由于套接字断开连接,因此套接字错误回调在成功重新连接后处理。
    • 是的,这是有道理的。非常感谢。您能否将其也添加到答案中。我明天接受。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2018-11-27
    • 2012-02-20
    • 2020-01-11
    • 2015-06-18
    相关资源
    最近更新 更多