问题标签 [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.

0 投票
1 回答
200 浏览

swift - Swift NIO EventLoopF​​uture 链未完成

我有一个基于 Vapor 应用程序的非常简单的服务。该服务使用来自另一个服务系列的数据。显然,这只是这些map方法所针对的应用程序。

链中的所有回调都执行,但链中的最后一个EventLoopFuture从未完成,导致我的服务无限期挂起。

此代码进行一次异步调用以获取会话 ID,然后使用该数据检查一个人是否是特定组的成员。对其他服务的调用返回合理的值 - 目前第二次调用总是返回错误。

当我调用此方法时,所有回调都会按预期执行和运行。

请注意,在此代码片段中,我已经“解开”了序列的各个阶段,以尝试找出问题所在,但整体行为不受影响。

我已经尝试了许多不同的链排列,使用flatMap,mapflatMapError在适当的情况下,而不改变最终结果。

我看不到最后一个如何flatMapThrowing执行并返回一个值,那么未来就不完整。我错过了什么?

0 投票
1 回答
170 浏览

swift - 在 Vapor 4 中的文件流之后运行操作

我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 转换为 Vapor。在 Perfect 中,将文件流式传输给用户相对简单,然后在文件完成后执行一些操作。

我正在尝试在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,无论是用户完全下载还是中断。

有谁知道如何做到这一点?以下是我尝试过的一些事情。

这是基本结构

第一次修改

第二次修改

在上述所有情况下,所有处理都会立即完成(可能是因为我们正在处理期货和承诺,而且一切都是异步的)。

我的问题是,Vapor 中是否有任何方法可以知道大文件何时完成流式传输以及流式传输的结果是什么?也许是一些中间件?

0 投票
2 回答
455 浏览

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),只是为了在DataDispatchData类型之间进行转换。

所以...

现在我的想法是其中之一

  • 我完全迷路了,我还没有找到一个简单的解决方案

  • 解决方案是创建一个由对象DispatchData支持的子类Data

  • 使用指向对象中原始字节数组的非复制初始化器创建的ByteBuffer结构,以及一个简单地保留对象直到和对象被销毁的自定义释放器。DispatchDataDataDataByteBufferDispatchData

我将不胜感激任何想法、经验或建议(特别是如果它是选项#1)。

0 投票
1 回答
491 浏览

ios - 使用 SwiftNIO SSH 进行远程连接

我正在研究一种解决方案,该解决方案将使用 SwiftNIO SSH 从远程网关系统读取/写入服务器文件到 iOS 设备的本地存储。这样我就可以执行shell命令。我检查了 Swift 的网站,但找不到具体的实现:

https://swift.org/blog/swiftnio-ssh/

我应该如何继续或有任何其他解决方法?

0 投票
0 回答
81 浏览

ios - Apple Secure Transport API 已弃用,还有哪些替代方案

嗨,据此 API 已被弃用并被视为遗留。它没有具体说明何时将其删除。他们建议使用 Network,尽管它没有用于替代传输/物理层的低级 API。

我计划用它来保护蓝牙通信(比如 BLE Uart 的东西),这意味着 API 不应该依赖于网络传输。安全运输符合这个要求。

  1. 可以将其用于未来安全的开发吗?
  2. 是否有替代方案可以支持具有模糊传输层(如 BLE)的东西?

我看过Swift-nio及其子代,看起来它在覆盖 Channel 等时可能会起作用,尽管它更适合网络传输。

0 投票
0 回答
91 浏览

swift - 我应该在 Swift NIO 中使用哪个事件循环?

文档中的示例显示了对 EventLoop 的现有引用,用于创建未来。

就我而言,我无权访问当前的 EventLoop。有没有一种简单的方法可以访问它?

或者,我可以访问 EventLoopGroup,我可以使用它services.lambda.client.eventLoopGroup.next()来获取 EventLoop。但这会产生额外的开销吗?我应该寻找现有的 EventLoop 吗?

0 投票
1 回答
110 浏览

swift - 在 Swift-NIO 数据报的 ChannelInboundHandler 中未调用 channelRead

我正在尝试在 Xcode 中运行的(新鲜)蒸汽应用程序中捕获 UDP 视频流。数据正在由 ffmpeg 流式传输,我可以使用 VLC 成功查看目标机器上的流,这也是运行蒸汽应用程序的一个,使用udp://0.0.0.0:5000. 我使用了各种 Apple 文档来获取下面的代码。当我运行它时,我在控制台日志中得到了这些输出行,但我想知道它们是否不相关:

在 configure.swift 中:

try setupClient()

这是客户端代码:

问题是,虽然channelRegisteredchannelActive被调用,然后是一个永无止境的 流readComplete,但重要的channelRead永远不会被调用 - 也不会errorCaught。如果我注释掉对 setupClient 的调用,则没有网络活动,但是,如果它运行,则 Xcode 的网络监视器显示与 ffmpeg 中的级别一致的活动。所以,我相信连接正在建立。

我想知道问题是否出在我设置处理程序的方式上?所有示例都使用 echo 或反射聊天示例,因此入站处理程序是在使用上下文的数据写入函数的闭包中设置的,而不是将其添加到初始化程序中(尽管出站处理程序是以这种方式设置的)。

0 投票
1 回答
141 浏览

ios - 基于 Swift-NIO 的代理在每个传入请求上重新配置管道

我正在使用 Swift-NIO 为 iOS/tvOS 创建一个带有 TLS 的 Http/2 代理。我的代理启动:

服务器使用 Https over Http/2 正确工作和处理请求,甚至在被询问时 gzip 响应。那太好了。但是在日志中,我看到对于每个传入的请求,都在重新配置管道(即一遍又一遍地调用附加处理程序的转义)。这是它应该工作的方式吗?据我所知,我不会在任何地方关闭上下文/频道。这个代理是否为每个请求设置了一个新的管道,因此我是否错过了通过同一通道(和管道)发送大量请求的 Http/2 方法?或者这实际上是它应该工作的方式?感觉不是最理想的结果...

日志:

记录 context.channel.pipeline.debugDescription 给出:

所以管道的objectIdentifier每次都不一样...

0 投票
0 回答
50 浏览

swift - SwiftNIO websocket 服务器和作为客户端的浏览器之间的连接问题

我的 websocket 服务器出现问题,无法从 websocket 客户端获取消息。据我了解,对于 ws 连接,客户端发送升级命令,服务器使用 Switching 协议状态代码和 Accept-Key 对其进行响应。我根据下面的代码实现了这个:

和服务器根据:

我通过这个站点测试我的代码:http: //livepersoninc.github.io/ws-test-page/?

该站点正确打开了套接字,并且站点中的状态更改为已连接,但是在点击发送消息后,我的服务器中没有任何反应,并且我无法收到任何消息。如果有人指导我错过了什么,我将不胜感激。

0 投票
1 回答
31 浏览

swift-nio - 处理 Swift-nio 服务器端 TCP 连接事件并将上下文数据发送到客户端

我正在研究 COPS (rfc 2748) 协议处理程序。在建立 TCP 连接后,我需要能够立即从服务器向客户端发送消息。我没有找到任何描述此功能的 API。

任何指针将不胜感激。