用 Swift 开发 http post 请求客户端时,怎么优先使用 ipv4?或者直接禁用 ipv6

2023-02-06 14:09:12 +08:00
 1311317

最近遇到一个问题,用 swift 的 URLSession 库请求远程服务时,经常遇到数据传输慢的情况,在纯 ipv4 环境下就没有交互慢的问题,后来排查是因为 ipv6 导致的。

让用户在纯 ipv4 网络下使用 app 根本不现实,让运维关闭服务器的 ipv6 解析也不现实,只能寄希望于代码端了。

请问各位大佬,怎么在代码层面限制只使用 ipv4 进行交互?或者优先使用 ipv4 也行。

有没有第三方库推荐的?

693 次点击
所在节点    程序员
3 条回复
xinJang
2023-02-06 14:26:15 +08:00
修改 hosts
NouveauNom
2023-02-06 14:59:14 +08:00
自行测试

let config = URLSessionConfiguration.default
config.networkServiceType = .default
//config.allowsCellularAccess = false
config.connectionProxyDictionary = [:]
config.ipv6Enabled = false
let session = URLSession(configuration: config)

let url = URL(string: "https://example.com/api")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "request_data".data(using: .utf8)

let task = session.dataTask(with: request) { (data, response, error) in
// Handle response
}
task.resume()
NouveauNom
2023-02-06 15:02:14 +08:00
忽略上面的回答。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/913596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX