我正在研究 Swift Vapor 框架。
我正在尝试创建一个控制器类,它将在 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) 将其字符发送回客户端?
在实际代码中,控制器方法可能会长时间保持与客户端的 HTTP 连接打开,并在获得 Asterisk 活动数据后立即将其发送给客户端。所以每个 .send(name) 实际上应该立即将数据传递给客户端,而不是等待最终的 .close() 调用。
添加 try chunker.flush() 并没有产生更好的结果..