V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
SteveXMH
V2EX  ›  程序员

请教如何使用 CFNetwork 来实现异步发出多个流式请求且能够返回流式数据

  •  
  •   SteveXMH · 266 天前 · 1050 次点击
    这是一个创建于 266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先叠个甲,本人第一次在 V2EX 发布主题,而且可能技术不精,代码水平比较低但是还是希望能够尝试学习一下,所以请大家多多包涵,非常感谢!

    我正在尝试使用 Rust 语言实现一个利用系统自带的 HTTP 客户端框架的 HTTP 异步请求框架,名字叫做 ALHC (开源)

    考虑在 Windows 上使用 WinHTTP 库,在 macOS 上使用 CFNetwork 库,在 Linux 上想动态调用 libcurl (不过还没有开始做这个部分)

    而在给 macOS 上编写实现时遇到了问题:

    • 请求绝大多数异常缓慢,通常第一个请求结束后就难以继续后续的请求了
    • 尝试使用流式发送数据时一旦超出使用 CFStreamCreateBoundPair 创建流的时候传入的容量值(transferBufferSize)则会卡死而无法继续发送
    • 无法以流式数据的方式发送请求(原因如上)

    我已经尽力去查询了有关的信息,但是还是没有琢磨清楚,可以看看我找到的各种文档,希望能有所帮助:

    如果有大佬能够鼎力相助的话感激不尽!

    3 条回复    2024-04-05 11:20:05 +08:00
    ecnelises
        1
    ecnelises  
       266 天前
    我不清楚 CFNetwork 和你项目的具体细节,但你可以用 Swift 对应的上层库 URLSession 看有没有这个问题。印象里,在 Objective-C 时代 iOS 发网络请求有很多的坑。

    另外建议你还是先统一用 curl ,我有个要用到加密库的项目,本来也想在不同平台用各自的系统库,但这样做至少在初期弊大于利,需要多实现很多代码,行为也不一致,万一有什么安全问题开源库升级也比系统库方便,用系统库仅存的好处可能就是目标二进制体积更小一些,但 curl 本身也不大。
    SteveXMH
        2
    SteveXMH  
    OP
       266 天前
    @ecnelises 是的,我一开始是为了编写 GUI 程序才有了这样一个想法来编写这样的框架,毕竟是个人项目所以并不是很追求高度的稳定性,至少在 Windows 上我的 GUI 程序能够借助系统自带的 WinHTTP 库减少大约 200KB 的大小(为了足够的便携性所以能尽量小就最好),而原先绑定的就是 curl 静态库。

    而且可能是系统的库有特殊优化还是我原先使用的绑定写的很拉跨,下载性能提升非常明显(可能不太好展示)

    我有简单考虑过参考更高阶层的 URLSession 但是我不是很熟悉 Swift ,Obj-C 也是勉强能理解一些基本的面向对象

    考虑到苹果一贯对文档和接口的作风,包装的类型肯定基本没什么大问题,越底层那种资料就很难找或者难找到对自己有帮助或者价值的信息。
    nieyujiang
        3
    nieyujiang  
       265 天前 via iPhone
    CFnetwork 不建议用,很多东西已经标记为废弃了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 00:58 · PVG 08:58 · LAX 16:58 · JFK 19:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.