问题标签 [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 回答
115 浏览

swift - Swift / SwiftNIO / Vapor:EventLoop 中的 wait() 或类似的,相当于 JavaScript 的 Promise.all()

我从 Vapor 4 开始,在旅程的一开始就卡住了。

我知道 JavaScript 中的 Promises,并且我想我对 Swift 的 Futures 有所了解。我认为我的问题是事实,可悲的是,大多数教程都使用wait()它们来保持他们的例子简短而简单。在 Vapor 中,我遇到了 EventLoopwait()并被禁止进入。

我正在尝试做的事情

我正在尝试对 MySQL 数据库执行一些查询,这些查询需要串行执行:

  1. 两个表被截断。
  2. 然后我将第三个表中的所有行复制到一个截断表中。
  3. 最后,我正在查询该填充表,尝试遍历每个匹配的结果并将其插入到另一个截断表中。

出了什么问题/我需要帮助的地方

  1. 经过几天难以理解的编译错误,它现在正在运行。第一部分正在执行,但它缺少某些回调的正确实现。我正在考虑JavaScript 中的Promise.all([])之类的东西。我不想嵌套这两个查询,因为我认为拥有一个表名数组并为每个查询执行查询会更干净。这是我不知道该怎么做的第一件小事。
  2. 最重要的是:第二步,将匹配的行插入到另一个表中,失败了。在 Xcode 的控制台中,它会打印很多次:
    [ ERROR ] Connection request timed out. This might indicate a connection deadlock in your application. If you're running long running requests, consider increasing your connection timeout. [database-id: mysql, request-id: F159E838-0E90-4025-929E-596A6A66A502]

我想有几种更好的方法可以解决这个问题,但是因为我想学习和思考一些我想尝试实现的其他任务,我想通过串行执行这些查询来解决它。

我的代码

Controllers/RubricsTreeController.swift

Helpers/NestedSet.swift

我很好奇你的想法和改进!:)

0 投票
1 回答
135 浏览

swift - Swift Vapor 4 上传、验证、调整图像文件大小

我正在尝试将照片发布到蒸汽 4 服务器。我将团队名称作为字符串发送,将图像作为数据发送。

我想在验证它的大小不超过 1MB 后上传照片,并且 mimetype 是图像类型(jpg,jpeg,png),然后将该图像调整为 300px*300px,最后将其保存到public\uploads目录中。

我不知道该怎么做。

这是我的代码。

代码也应该适用于 ubuntu 服务器 VPS 云实例。

0 投票
1 回答
35 浏览

swift - 发送到已连接客户端的最佳实践

我正在尝试设计一个 SwiftNIO 服务器,其中多个客户端(如 2 个或 3 个)可以连接到服务器,并且在连接后,它们都可以从服务器接收信息。

为此,我创建了一个共享并添加到连接客户端的每个管道的ServerHandler类。

上面的代码灵感来自https://github.com/apple/swift-nio/blob/main/Sources/NIOChatServer/main.swift

ServerHandler该类中,每当有新客户端连接时,该通道就会添加到数组中。然后,当我准备好向所有客户端发送数据时,我只需遍历 , 中的通道ServerHandler并调用writeAndFlush.

这似乎工作得很好,但有几件事我担心:

  1. 似乎并不真正推荐创建共享处理程序,而是应该为每个客户端创建一个新处理程序。但是,我将如何访问需要向其发送数据的所有客户端通道?(我在由 UI 确定的时间发送数据)
  2. 为什么Channel.write似乎什么也没做?如果我使用Channel.write而不是writeAndFlush在服务器中使用,我的客户端将无法接收任何数据。

如果这些问题很愚蠢,我深表歉意,我SwiftNIO最近才开始接触网络。

如果有人能给我一些见解,那就太棒了。

0 投票
1 回答
60 浏览

ios - 是否可以在 XCTest 测试应用程序中打开基于 SwiftNIO 的服务器套接字?

我有一个适用于 UI 组件的 XCTest。我尝试使用 SwiftNIO 在 xctext 函数中打开一个服务器套接字。

我从这里获取了 echo 服务器示例。为了进行肮脏的测试,我简化了,删除了带有硬编码值的参数。

测试运行正确,它也打印

但实际上这里的 EchoClient不起作用

监听套接字也无法使用

我还尝试将 UITestEntitlements 设置com.apple.security.app-sandbox为 false。

有没有办法允许来自 XCTest 的服务器套接字?

最初我试图嵌入一个 Swift-GRPC 端点,以允许循环控制器中的硬件进行更细粒度的控制。目的是使用命令行 xcodebuild 启动 XCTest,这反过来又启动了一个长时间运行的测试,但不是用 Swift 编写的测试代码,而是在测试过程之外通过grpc 端点。

由于 grpc 端点不起作用,我将问题简化为上述问题。

任何人都有提示,如何解决这个问题,或者提示为什么永远不可能在 XCTest 应用程序中打开服务器套接字,请不要犹豫在这里回复。

0 投票
1 回答
33 浏览

swift - Vapor (SwiftNIO) 与异步方法的接口

我正在尝试使用第 3 方库中的异步方法从 URL 获取字符串结果

在 Vapor Swift 请求处理程序中。

Apple 的SwiftNIO 文档介绍了这一点:

在异步进程提供值之前返回未来的结果

我们如何只在它具有价值之后才返回承诺?