This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3120MOD:大型 HTTP 传输

Guru**** 2392095 points
Other Parts Discussed in Thread: CC3120

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/926344/cc3120mod-large-http-transfers

器件型号:CC3120MOD
主题中讨论的其他器件:CC3120

大家好、我正在设置一个 SimpleLink 应用程序、其中包括通过 HTTP 下载可能是多 GB (从 SD 卡)的文件。

我的代码运行正常、但细节有几个问题。

1.如果用户中止下载(关闭连接),固件是否可以通过某种方式检测到这种情况? 我不会从 sl_NetAppSend ()调用中获得非零结果、并且 sl_DeviceGet (sl_device_status)(没有很好地记录)会返回零状态、无论数据是流出还是被丢弃、都将返回零 DEVICE_STATUS。 断开连接时、似乎不会调用任何事件回调。

将元数据中的 content_length 设置为64位值似乎不起作用、即使我指定的大小为8字节也是如此。 对于超过2GB 的文件、似乎我刚刚关闭了 content_length、用户无法很好地监控进度。

如果有任何建议,将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jack:

    我们的器件是否作为 HTTP 服务器运行、用户是否正在从下载文件? 我无法从您的描述中得知。 请确认。 还描述我们的器件在(AP/STA)模式下运行。

    1.正在等待您的上述回复。

    2.在哪里设置 content_length?

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件当前处于 STA 模式、但我希望代码也在 AP 模式下工作。 它作为 HTTP 服务器运行、但主机代码 NetAppRequestHdlr 正在处理请求、遵循手册第9.7.2.1节中的"获得碎片"模型。 数据来自单独的存储器、而不是 CC3120文件系统。

    content_length 在第一个 sl_NetAppSend 调用中的元数据中设置。

    其他说明:

    -我使用的是 simplelink_sdk_wifi 插件_2_40_00_22

    主机驱动程序接口包括 slcb_NetAppHttpServerHdlr 事件处理程序,但似乎从未调用过,而是调用 NetAppRequestHdlr 来处理 HTTP 事件。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Jack、

    由于您使用的是内部 HTTP 服务器、我认为这是不可能的。 由于 HTTP 本身是无状态的、因此无法检测断开连接、因此您必须依赖超时。 如果您使用网络服务层中的 HTTP 服务器库尝试检测 TCP 连接是否已提前关闭、则可能会发生这种情况、但我不知道是否有人以前这么做过。 这是因为 HTTP 服务器将在主机代码上运行、因此即使 NWP 仍保持 TCP 套接字、也会从主机端创建 TCP 套接字。 最终、HTTP 端没有内置任何内容可以告诉您这一点、但 TCP 层可能有一种方法、但您需要访问 HTTP 服务器中的底层 TCP 套接字。 请记住、我们通常不建议更改我们的源代码、因为我们只能保证代码的发布方式、但如果这对您来说是一项关键要求、您可以尝试自行调查此路由。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我感谢这些建议。 没有超时-如果连接已关闭,NWP 看起来就会立即丢弃 sl_NetAppSend()请求,并具有标称状态。 我可以查找此情况-所有请求都在2毫秒内返回。 如果下载仍然有效、至少偶尔会(50个1364字节片段中有1个?) 呼叫所需的时间要长得多。 但这似乎很脆弱。

    我希望有一种方法可以查询传递到我的 NetAppRequestHdlr (并传递回 SL_NetAppSend 请求)的"请求句柄"的状态、但我猜这是 NWP 内部的、不提供此类查询。

    > TCP 层可能有一种方式,但您需要访问 HTTP 服务器中的底层 TCP 套接字

    我不确定您是否建议修改 NWP 固件-我希望避免这样做。 但是、这确实让我有了一个想法: 我可以在主机端使用不同端口号上的 TCP 套接字服务来执行我自己的 HTTP 服务器、特别是对于此文件下载函数。内置的 HTTP 服务器仍可用于其他所有功能、包括为 NWP 闪存文件系统中的页面提供服务。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jack:

    我不确定您是否建议修改 NWP 固件-我希望避免这样做。 但是、这确实让我有了一个想法: 我可以在主机端使用不同端口号上的 TCP 套接字服务来执行我自己的 HTTP 服务器、特别是对于此文件下载函数。内置的 HTTP 服务器仍可用于其他所有功能、包括为 NWP 闪存文件系统中的页面提供服务。 

    您无法修改 NWP FW。 正确、我建议在主机端使用 HTTP 服务器、以便您可以更轻松地访问底层功能。  

    很高兴我能提供帮助。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、这可能不太困难。 我可以处理32位以上的内容长度。

    感谢你的帮助。