问题标签 [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 投票
2 回答
1373 浏览

swift - 在继续之前获取 [EventLoopF​​uture] 的所有值

我有一组值映射到多个 Promise,每个 Promise 都给我一个 EventLoopF​​uture。所以我最终得到了一个具有可变大小 [EventLoopF​​uture] 的方法,并且我需要所有响应都成功才能继续。如果其中一个或多个返回错误,我需要执行错误场景。

在继续使用成功路径或错误路径之前,如何等待整个 [EventLoopF​​uture] 完成?

0 投票
1 回答
175 浏览

swift - 如何将使用 SwiftNIO AsyncHTTPClient 下载的文件写入文件系统?

我想使用基于SwiftNIO的AsyncHTTPClient库下载一个大文件(数百兆字节) 。我希望将此文件流式传输到文件系统,同时消耗尽可能少的 RAM(理想情况下,它不应该将整个文件保留在 RAM 中),并且还能够通过显示的简单输出报告下载进度完成百分比。print

据我了解,我需要实现一个HTTPClientResponseDelegate,但我应该使用什么确切的 API 来进行文件写入?文件写入可以被阻塞,同时仍然允许 HTTP 客户端进行吗?在这种情况下,委托代码会如何?

0 投票
1 回答
201 浏览

openssl - 带有弱密码的 iOS 13 证书固定停止工作但在 iOS 12 中工作正常

我很好奇通过 NWProtocolTLS.Options() 传递弱密码。因为它在 iOS 12 中运行良好,但在 iOS 13 Apple 上我猜他们做了一些改变,所以它停止了。

这里的一件事是:OpenSSL 如何使用弱密码(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384)并建立连接。以及为什么不使用 iOS 13 Network.framework。

基本上,我的 Socket 服务器已经被弱密码TLS_DHE_RSA_WITH_AES_256_GCM_SHA384冻结了,这是我使用 WireShark 通过 OpenSSL 从 Server Hello 捕获的。所以现在我通过以下方法使用 iOS 13 传递这个密码,但它不起作用。

注意:我们已经提出了反馈助手查询,但我们仍在等待他们。这不是 Web Socket,我们通过服务器 Wifi 热点连接。

不知何故,我们在 iOS 的 OpenSSL 库(https://github.com/levigroker/GRKOpenSSLFramework)的帮助下解决了这个问题,但是在长数据轮询和字节缓冲机制之后,在处理更长的数据时面临很多问题。

在 OpenSSL iOS App 中查看 Client Hello 后,它通过了 86 个密码及其工作。

但是在传递客户端 Hello 的 iOS Network.framework 中,它通过了 36 个密码并且它不起作用。

如果有人想查看 WireShark 数据包,请添加评论,我将进一步附上。

所以任何想法或帮助表示赞赏!

0 投票
1 回答
148 浏览

swift - 在使用 Swift-NIO 进行联网的 MacOS 命令行工具/守护程序中使用 Swift 计时器:RunLoop 与等待问题

我正在将 Swift MacOS 命令行工具/守护进程转换为使用 Swift-NIO 进行网络连接。这是我的第一个 Swift-NIO 项目。

该工具每 0.1 秒触发一次计时器。这是在 Swift-NIO 转换之前启动守护程序/运行循环的 main.swift 底部的行:

这是我的 Universe.swift 类 init() 中的计时器。这个类总是只有一个实例:

在此配置中,计时器按预期每秒触发 10 次。但是如果我得到任何网络输入,我的 Swift-NIO 库就会崩溃,因为它不在预期的事件循环中。

在此处输入图像描述 在 Swift-NIO 中,我应该在 main.swift 的底部添加一个 channel.closeFuture.wait() 行:

这解决了 Swift-NIO 崩溃,但是我从来没有到达我的计时器 RunLoop,所以我的计时器没有触发。

如何使用 Swift-NIO 接收(和发送)网络数据,同时仍然有一个计时器运行?

如果有帮助,该项目的完整开源代码位于https://github.com/darrellroot/netrek-server-swift

0 投票
1 回答
349 浏览

ios - 我可以将 SwiftNIO 客户端 websocket 与不同的服务器 websocket 一起使用吗?

我是 WebSocket 的新手,在https://github.com/daltoniam/Starscream和 SwiftNIO 之间进行选择,

使用 SwiftNIO 找不到明确的指导方针,我可以在 iOS 中只使用 SwiftNIO 客户端 WebSocket。WebSocket 服务器将使用不同的 Web 技术(Java 或 Spring websocket)实现?或者如果我使用 SwiftNIO 开发客户端,服务器是否也必须使用 SwiftNIO 构建?

我的应用程序是 iOS 10 及更高版本,所以我不能使用苹果 WebSocket API(>ios13)

提前致谢。

0 投票
1 回答
1006 浏览

swift - 映射 EventLoopF​​uture 时出错到预期的类型

我已经尝试过映射、平面映射、创建EventLoopFutureofPost等...我试图返回两个db.queries创建要在 上呈现的单独内容数组req.view.render,这将返回一个EventLoopFuture<View>.

我的错误是:Cannot convert value of type 'EventLoopFuture<[Posts]>' to expected argument type '[Posts]'.

这是路由器调用的我的代码:

编辑:在下面重新发表我的评论。此代码段返回帖子(和关联的类别)。试图增加一秒钟db.query的回报。

0 投票
2 回答
168 浏览

swift - 使用 OutputStream 将 CircularBuffer (swift-nio) 写入 Swift 中的文件?

我正在尝试使用CircularBuffer<UInt8>SwiftNIO 来存储数据,一旦缓冲区几乎满了,就使用OutputStream. 不幸的是,该OutputStream.write()方法需要UnsafePointer作为参数,而CircularBuffer可以输出UnsafeBufferPointer. 有没有办法转换CircularBufferUnsafePointer?

我尝试使用以下代码扩展 CircularBuffer,我成功使用该代码将结构转换为字节数组,因为有人建议 CircularBuffer 实际上是一个结构,但我的输出文件中出现垃圾:

有什么想法吗?

0 投票
1 回答
224 浏览

swift - Swift-NIO + WebSocket-Kit:在 Mac 应用程序中正确设置/清理

语境

我正在开发一个 Mac 应用程序。在这个应用程序中,我想运行一个 websocket 服务器。为此,我使用了 Swift NIO 和 Websocket-Kit。我的完整设置如下。

问题

Websocket-Kit 和 SwiftNIO 的所有文档都旨在创建一个服务器端进程,该进程在您从命令行启动时启动,然后无限运行。

在我的应用程序中,我必须能够启动 websocket 服务器,然后将其关闭并按需重新启动,而无需重新启动我的应用程序。下面的代码可以做到这一点,但我想确认两件事:

  1. test()函数中,我向所有连接的客户端发送一些文本。我不确定这是否是线程安全的和正确的。我可以WebSocket像在这里一样存储实例并从应用程序的主线程向它们发送消息吗?

  2. 我是否正确关闭了 websocket 服务器?调用的结果是serverBootstrap(group:)[...].bind(host:port:).wait()创建一个Channel然后无限等待。当我调用shutdownGracefully()关联EventLoopGroup时,该服务器是否已正确清理?(我可以确认关闭后端口 5759 再次空闲,所以我一切都清理干净了?)

感谢您的输入;很难找到在应用程序中使用 SwiftNIO 和 Websocket-Kit 的示例。

代码

0 投票
1 回答
128 浏览

swift - SwiftNIO:发送的包裹部分收到

我已经使用 swift nio 开发了一个客户端和一个服务器,我发送 12 到 1000 字节之间的所有大小的包都没有问题,因为服务器发送了一个 528 字节的包,当客户端收到它时,它是 512 字节。我试图弄清楚它为什么会发生。有谁知道是否有机会设置最小 ByteBuffer 容量?或者如果我错过了什么。谢谢大家。在此处输入图像描述

0 投票
1 回答
157 浏览

swift - SwiftNIO 有没有类似 GCD 屏障的机制?

GCD 和 SwiftNIO 可以共存吗?

原谅我的无知。这让我很困惑。

推理:

  • 线程过多对性能不利;
  • GCD 创建和管理自己的线程;
  • SwiftNIO 创建和管理自己的线程;
  • 如果您使用许多不同的框架/库,每个都创建和管理各自的线程,那么最终可能会导致线程过多;

我要完成的工作:

我需要同时发生多个独立任务(由 SwiftNIO 处理),但偶尔,一旦所有先前的任务完成,运行单个串行任务(并且可能在此期间默认为 SwiftNIO 的不同行为)。GCD为此目的设置了调度障碍,但据我所知,SwiftNIO 没有类似的机制。