gpt4 book ai didi

swift - 如何在 Swift Vapor 中使用异步创建的正文 block 生成响应正文

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

我正在研究 Swift Vapor 框架。

我正在尝试创建一个 Controller 类,它将在 SSL 链接上获得的数据映射到第三方系统(Asterisk PBX 服务器..)到响应正文中,该响应正文在一段时间内发送到客户端。

因此,我需要在接收到的文本行(通过 SSL 连接单独获得)发送时发送它们,而无需等待构建“完整响应”。

看到这个例子:

return Response(status: .ok) { chunker in
for name in ["joe\n", "pam\n", "cheryl\n"] {
sleep(1)
try chunker.send(name)
}

try chunker.close()
}

我认为这可能是要走的路。

但我看到连接到 Vapor 服务器的是 REST 调用等待循环完成,然后才收到三行结果。

我怎样才能让 try chunker.send(name) 在不等待循环完成的情况下将它的字符发送回客户端?

在实际代码中, Controller 方法可以潜在地保持到客户端的 HTTP 连接打开很长时间,一旦获得 Asterisk 事件数据就将其发送到客户端。所以每个 .send(name) 实际上应该立即将数据传递给客户端,而不是等待最后的 .close() 调用。

添加一个 try chunker.flush() 并没有产生任何更好的结果..

最佳答案

HTTP 请求并非真正设计用于那样工作。不同的浏览器和客户端将根据其实现而发挥不同的作用。

例如,如果您使用telnet 连接到您粘贴的chunker 示例,您将看到每秒发送一次数据。但另一方面,Safari 会在显示之前等待整个响应。

如果你想像这样可靠地发送分块数据,你应该使用像 WebSockets 这样专为它设计的协议(protocol)。

关于swift - 如何在 Swift Vapor 中使用异步创建的正文 block 生成响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202457/

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