当前位置: 首页 > 知识库问答 >
问题:

OkHttp重试在另一个IP上连接如果503

吴建中
2023-03-14

在我的后端应用程序中,我的负载均衡器使用循环来分配流量。因此,我的主机名上有两条A记录:

- x.x.x.x myapp.com
- y.y.y.y myapp.com

在其中任何一个关闭时,它返回503服务不可用。

现在,在我的Android应用程序中,我使用OKHTTP4.x进行网络操作,DNS重新定位缓存在设备上。因此,如果cahced IP宕机,它不会尝试到达其他IP,请求将失败。我尝试了多种方法来让它工作,但直到现在都没有。我尝试过的事情:

    null
OkHttpClient client = new OkHttpClient.Builder().build();

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        try  {
            List<InetAddress> addr = client.dns().lookup("myapp.com");

            for ( InetAddress a : addr ) {
                Log.d(TAG, a.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

thread.start();

我得到日志中的两个条目:

myapp.com/x.x.x.x
myapp.com/y.y.y.y

那么,是否有一种方法可以使OkHttp客户机在失败的情况下尝试其他IP呢?

共有1个答案

轩辕华辉
2023-03-14

任何应用程序都不能做到这一点,除非你有权访问你的DNS服务器源,让他选择在哪个ip中发送请求。

如果DNS通过任何方式记录可编辑的位置,例如使用主机文件来确定域指向哪个IP,那么您可以动态更改该文件,并完成工作。但是即使有主机文件,Android OS/iOS也不会让你这么做。

您不能选择将请求发送到特定的ip,除非您知道一种神奇的方法来将域名传递到报头中的请求,尤其是如果它上面有SSL的话。

 类似资料:
  • OkHttp3是否支持以下情况: x.x.x.x myapp.com y.y.y.y myapp.com 无法访问代理服务器。ProxySelector可用于顺序尝试多个代理服务器,最终返回到直接连接。 将此设置为false,以避免在重试请求具有破坏性时重试请求。在这种情况下,调用应用程序应该自己恢复连接故障。

  • 问题内容: 如何在用户类中打开数据库连接,我可以在其中进行数据库操作?以及为什么需要在DBConnection类中定义内置的已创建函数。 我创造了 db.php user.php result.php 在db.php中 在User.php中 在result.php $conn->real_escape_string(trim(strip_tags($_POST[‘username’]))); $e

  • 我有三张桌子;1.学生-id,name 2.主题-sid,sname 3.结果-id,sid,marks(id和sid是上面两个表引用的外键) 现在,我执行 我得到了最高分的科目名称。现在,我还想要获得这些最高分的学生姓名。 所以我尝试添加列 r.id,不起作用。我尝试在此查询中添加表学生。我可能会在添加表格或其他东西后对分组进行恶作剧? 这是我干的 我得到了每个学生的ID,有重复的科目和分数。而

  • 我们对okhttp重试请求有一些问题。根据我们的崩溃报告日志,我们的大多数客户都收到了太多此类异常。 他们抱怨的是,数据上传到服务器,但移动端仍然显示没有上传。我研究了一点,发现okHttp在连接失败时重试请求,猜测这与这个主题有关。我不能在调试应用程序时创建一个案例。我已经尝试连接到10.10.10.1,它得到了套接字超时,但似乎okhttp没有重试这个请求。如果(!StreamAllocati

  • 我是使用节点js(ws库)开发的网页登录服务器 我想将聊天模块添加到android应用程序。我正在为websocket客户端使用okhttp。当从设备连接时,它正在工作。但是当连接第二台设备时,它不工作。只有第一台设备websocket.on(“消息”)事件发射器会做出响应。另一台设备不监听onMessage。只有一台设备监听A. B- 如何配置onMessage在所有设备上工作? java客户端