问题标签 [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 - 在继续之前获取 [EventLoopFuture] 的所有值
我有一组值映射到多个 Promise,每个 Promise 都给我一个 EventLoopFuture。所以我最终得到了一个具有可变大小 [EventLoopFuture] 的方法,并且我需要所有响应都成功才能继续。如果其中一个或多个返回错误,我需要执行错误场景。
在继续使用成功路径或错误路径之前,如何等待整个 [EventLoopFuture] 完成?
swift - 如何将使用 SwiftNIO AsyncHTTPClient 下载的文件写入文件系统?
我想使用基于SwiftNIO的AsyncHTTPClient库下载一个大文件(数百兆字节) 。我希望将此文件流式传输到文件系统,同时消耗尽可能少的 RAM(理想情况下,它不应该将整个文件保留在 RAM 中),并且还能够通过显示的简单输出报告下载进度完成百分比。print
据我了解,我需要实现一个HTTPClientResponseDelegate
,但我应该使用什么确切的 API 来进行文件写入?文件写入可以被阻塞,同时仍然允许 HTTP 客户端进行吗?在这种情况下,委托代码会如何?
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 数据包,请添加评论,我将进一步附上。
所以任何想法或帮助表示赞赏!
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。
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)
提前致谢。
swift - 映射 EventLoopFuture 时出错到预期的类型
我已经尝试过映射、平面映射、创建EventLoopFuture
ofPost
等...我试图返回两个db.queries
创建要在 上呈现的单独内容数组req.view.render
,这将返回一个EventLoopFuture<View>
.
我的错误是:Cannot convert value of type 'EventLoopFuture<[Posts]>' to expected argument type '[Posts]'.
这是路由器调用的我的代码:
编辑:在下面重新发表我的评论。此代码段返回帖子(和关联的类别)。试图增加一秒钟db.query
的回报。
swift - 使用 OutputStream 将 CircularBuffer (swift-nio) 写入 Swift 中的文件?
我正在尝试使用CircularBuffer<UInt8>
SwiftNIO 来存储数据,一旦缓冲区几乎满了,就使用OutputStream
. 不幸的是,该OutputStream.write()
方法需要UnsafePointer
作为参数,而CircularBuffer
可以输出UnsafeBufferPointer
. 有没有办法转换CircularBuffer
成UnsafePointer
?
我尝试使用以下代码扩展 CircularBuffer,我成功使用该代码将结构转换为字节数组,因为有人建议 CircularBuffer 实际上是一个结构,但我的输出文件中出现垃圾:
有什么想法吗?
swift - Swift-NIO + WebSocket-Kit:在 Mac 应用程序中正确设置/清理
语境
我正在开发一个 Mac 应用程序。在这个应用程序中,我想运行一个 websocket 服务器。为此,我使用了 Swift NIO 和 Websocket-Kit。我的完整设置如下。
问题
Websocket-Kit 和 SwiftNIO 的所有文档都旨在创建一个服务器端进程,该进程在您从命令行启动时启动,然后无限运行。
在我的应用程序中,我必须能够启动 websocket 服务器,然后将其关闭并按需重新启动,而无需重新启动我的应用程序。下面的代码可以做到这一点,但我想确认两件事:
在
test()
函数中,我向所有连接的客户端发送一些文本。我不确定这是否是线程安全的和正确的。我可以WebSocket
像在这里一样存储实例并从应用程序的主线程向它们发送消息吗?我是否正确关闭了 websocket 服务器?调用的结果是
serverBootstrap(group:)[...].bind(host:port:).wait()
创建一个Channel
然后无限等待。当我调用shutdownGracefully()
关联EventLoopGroup
时,该服务器是否已正确清理?(我可以确认关闭后端口 5759 再次空闲,所以我猜一切都清理干净了?)
感谢您的输入;很难找到在应用程序中使用 SwiftNIO 和 Websocket-Kit 的示例。
代码
swift - SwiftNIO 有没有类似 GCD 屏障的机制?
GCD 和 SwiftNIO 可以共存吗?
原谅我的无知。这让我很困惑。
推理:
- 线程过多对性能不利;
- GCD 创建和管理自己的线程;
- SwiftNIO 创建和管理自己的线程;
- 如果您使用许多不同的框架/库,每个都创建和管理各自的线程,那么最终可能会导致线程过多;
我要完成的工作:
我需要同时发生多个独立任务(由 SwiftNIO 处理),但偶尔,一旦所有先前的任务完成,运行单个串行任务(并且可能在此期间默认为 SwiftNIO 的不同行为)。GCD为此目的设置了调度障碍,但据我所知,SwiftNIO 没有类似的机制。