问题标签 [swift-nio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - Swift NIO EventLoopFuture 链未完成
我有一个基于 Vapor 应用程序的非常简单的服务。该服务使用来自另一个服务系列的数据。显然,这只是这些map
方法所针对的应用程序。
链中的所有回调都执行,但链中的最后一个EventLoopFuture
从未完成,导致我的服务无限期挂起。
此代码进行一次异步调用以获取会话 ID,然后使用该数据检查一个人是否是特定组的成员。对其他服务的调用返回合理的值 - 目前第二次调用总是返回错误。
当我调用此方法时,所有回调都会按预期执行和运行。
请注意,在此代码片段中,我已经“解开”了序列的各个阶段,以尝试找出问题所在,但整体行为不受影响。
我已经尝试了许多不同的链排列,使用flatMap
,map
和flatMapError
在适当的情况下,而不改变最终结果。
我看不到最后一个如何flatMapThrowing
执行并返回一个值,那么未来就不完整。我错过了什么?
swift - 在 Vapor 4 中的文件流之后运行操作
我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 转换为 Vapor。在 Perfect 中,将文件流式传输给用户相对简单,然后在文件完成后执行一些操作。
我正在尝试在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,无论是用户完全下载还是中断。
有谁知道如何做到这一点?以下是我尝试过的一些事情。
这是基本结构
第一次修改
第二次修改
在上述所有情况下,所有处理都会立即完成(可能是因为我们正在处理期货和承诺,而且一切都是异步的)。
我的问题是,Vapor 中是否有任何方法可以知道大文件何时完成流式传输以及流式传输的结果是什么?也许是一些中间件?
swift - 如何在不复制的情况下将“数据”对象放入 Swift-NIO?
我对 Swift很陌生,对 NIO 也很陌生。
我正在将 Swift 代码添加到需要将大量数据 (GB) 上传/下载到 AWS 的大型项目中。为此,我导入了严重依赖 NIO的 GitHub 项目Soto 。
大多数发送/接收数据的方法都是通过ByteBuffer
结构来完成的。我的应用程序已经有数据要上传到 FoundationData
对象中。我很难找出将这些Data
对象放入 NIO 的最佳方法。
在NIO ByteBuffer
(2.26.0)的文档中,它指出
支持的类型:可以从 ByteBuffer 读取/写入多种类型。...开箱即用,ByteBuffer 支持例如以下类型(非详尽列表):
- 字符串/静态字符串
- Swift 的各种(无符号)整数类型
- 基金会资料
- [UInt8] 通常是 UInt8 的任何集合
但是,最新的 swift-nil 包不ByteBuffer
支持 FoundationData
对象。相反,它支持DispatchData
对象,而对象又似乎与对象没有互操作性Data
。
我要避免的是复制每个数据块(一次 100 MB),只是为了在Data
和DispatchData
类型之间进行转换。
所以...
现在我的想法是其中之一
我完全迷路了,我还没有找到一个简单的解决方案
解决方案是创建一个由对象
DispatchData
支持的子类Data
使用指向对象中原始字节数组的非复制初始化器创建的
ByteBuffer
结构,以及一个简单地保留对象直到和对象被销毁的自定义释放器。DispatchData
Data
Data
ByteBuffer
DispatchData
我将不胜感激任何想法、经验或建议(特别是如果它是选项#1)。
ios - 使用 SwiftNIO SSH 进行远程连接
我正在研究一种解决方案,该解决方案将使用 SwiftNIO SSH 从远程网关系统读取/写入服务器文件到 iOS 设备的本地存储。这样我就可以执行shell命令。我检查了 Swift 的网站,但找不到具体的实现:
https://swift.org/blog/swiftnio-ssh/
我应该如何继续或有任何其他解决方法?
swift - 我应该在 Swift NIO 中使用哪个事件循环?
文档中的示例显示了对 EventLoop 的现有引用,用于创建未来。
就我而言,我无权访问当前的 EventLoop。有没有一种简单的方法可以访问它?
或者,我可以访问 EventLoopGroup,我可以使用它services.lambda.client.eventLoopGroup.next()
来获取 EventLoop。但这会产生额外的开销吗?我应该寻找现有的 EventLoop 吗?
swift - 在 Swift-NIO 数据报的 ChannelInboundHandler 中未调用 channelRead
我正在尝试在 Xcode 中运行的(新鲜)蒸汽应用程序中捕获 UDP 视频流。数据正在由 ffmpeg 流式传输,我可以使用 VLC 成功查看目标机器上的流,这也是运行蒸汽应用程序的一个,使用udp://0.0.0.0:5000
. 我使用了各种 Apple 文档来获取下面的代码。当我运行它时,我在控制台日志中得到了这些输出行,但我想知道它们是否不相关:
在 configure.swift 中:
try setupClient()
这是客户端代码:
问题是,虽然channelRegistered
和channelActive
被调用,然后是一个永无止境的 流readComplete
,但重要的channelRead
永远不会被调用 - 也不会errorCaught
。如果我注释掉对 setupClient 的调用,则没有网络活动,但是,如果它运行,则 Xcode 的网络监视器显示与 ffmpeg 中的级别一致的活动。所以,我相信连接正在建立。
我想知道问题是否出在我设置处理程序的方式上?所有示例都使用 echo 或反射聊天示例,因此入站处理程序是在使用上下文的数据写入函数的闭包中设置的,而不是将其添加到初始化程序中(尽管出站处理程序是以这种方式设置的)。
ios - 基于 Swift-NIO 的代理在每个传入请求上重新配置管道
我正在使用 Swift-NIO 为 iOS/tvOS 创建一个带有 TLS 的 Http/2 代理。我的代理启动:
服务器使用 Https over Http/2 正确工作和处理请求,甚至在被询问时 gzip 响应。那太好了。但是在日志中,我看到对于每个传入的请求,都在重新配置管道(即一遍又一遍地调用附加处理程序的转义)。这是它应该工作的方式吗?据我所知,我不会在任何地方关闭上下文/频道。这个代理是否为每个请求设置了一个新的管道,因此我是否错过了通过同一通道(和管道)发送大量请求的 Http/2 方法?或者这实际上是它应该工作的方式?感觉不是最理想的结果...
日志:
记录 context.channel.pipeline.debugDescription 给出:
所以管道的objectIdentifier每次都不一样...
swift - SwiftNIO websocket 服务器和作为客户端的浏览器之间的连接问题
我的 websocket 服务器出现问题,无法从 websocket 客户端获取消息。据我了解,对于 ws 连接,客户端发送升级命令,服务器使用 Switching 协议状态代码和 Accept-Key 对其进行响应。我根据下面的代码实现了这个:
和服务器根据:
我通过这个站点测试我的代码:http: //livepersoninc.github.io/ws-test-page/?
该站点正确打开了套接字,并且站点中的状态更改为已连接,但是在点击发送消息后,我的服务器中没有任何反应,并且我无法收到任何消息。如果有人指导我错过了什么,我将不胜感激。
swift-nio - 处理 Swift-nio 服务器端 TCP 连接事件并将上下文数据发送到客户端
我正在研究 COPS (rfc 2748) 协议处理程序。在建立 TCP 连接后,我需要能够立即从服务器向客户端发送消息。我没有找到任何描述此功能的 API。
任何指针将不胜感激。