gpt4 book ai didi

ios - WebSocket 消息是否缓存在 iOS 上?

转载 作者:行者123 更新时间:2023-11-28 05:56:23 25 4
gpt4 key购买 nike

奇怪,但我找不到任何相关信息:如果我向 iOS 上的 WebSocket 流写入一条 [大] 消息并且执行返回到我的代码,消息是否已经发送或以某种方式缓冲?

我正在使用 Starscream 库,但它只使用 CFStream-s。

最佳答案

查看 source code for the Starscream library提到,库将发送操作附加到 NSOperation 队列:

private func dequeueWrite(..) {
...
writeQueue.addOperation(operation)
}

然后立即返回。因此,当其中一个发送方法返回时,例如:
open func write(data: Data, completion: (() -> ())? = nil)
该消息尚未发送。但是正如您所看到的,您可以将一个完成 block 传递给此方法,当整个消息已写入底层输出流时将调用该 block 。请注意,这不会告诉您有关消息是否实际上已在网络上发送,或者发件人是否已成功收到消息的任何信息。要知道发送方是否已成功接收和处理消息,您需要等待响应消息 - 这是您需要在应用程序协议(protocol)中定义的内容。

在生产中使用 Starscream 库之前,您可能想要报告/修复其中的一些问题。在查看发送机制时,我注意到如果 WebSocket.swift line 1254 上的 OutputStream 缓冲区已满该库尝试在繁忙的循环中发送缓冲区的其余部分,而不是等待 hasSpaceAvailable 事件。如果发送大消息,这可能会浪费大量 CPU 周期。此外,当 stream.write 返回 0 时,表明输出缓冲区已满,这种情况似乎被错误地处理为错误。

关于ios - WebSocket 消息是否缓存在 iOS 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com