问题标签 [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 / SwiftNIO / Vapor:EventLoop 中的 wait() 或类似的,相当于 JavaScript 的 Promise.all()
我从 Vapor 4 开始,在旅程的一开始就卡住了。
我知道 JavaScript 中的 Promises,并且我想我对 Swift 的 Futures 有所了解。我认为我的问题是事实,可悲的是,大多数教程都使用wait()
它们来保持他们的例子简短而简单。在 Vapor 中,我遇到了 EventLoopwait()
并被禁止进入。
我正在尝试做的事情
我正在尝试对 MySQL 数据库执行一些查询,这些查询需要串行执行:
- 两个表被截断。
- 然后我将第三个表中的所有行复制到一个截断表中。
- 最后,我正在查询该填充表,尝试遍历每个匹配的结果并将其插入到另一个截断表中。
出了什么问题/我需要帮助的地方
- 经过几天难以理解的编译错误,它现在正在运行。第一部分正在执行,但它缺少某些回调的正确实现。我正在考虑JavaScript 中的Promise.all([])之类的东西。我不想嵌套这两个查询,因为我认为拥有一个表名数组并为每个查询执行查询会更干净。这是我不知道该怎么做的第一件小事。
- 最重要的是:第二步,将匹配的行插入到另一个表中,失败了。在 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
我很好奇你的想法和改进!:)
swift - Swift Vapor 4 上传、验证、调整图像文件大小
我正在尝试将照片发布到蒸汽 4 服务器。我将团队名称作为字符串发送,将图像作为数据发送。
我想在验证它的大小不超过 1MB 后上传照片,并且 mimetype 是图像类型(jpg,jpeg,png),然后将该图像调整为 300px*300px,最后将其保存到public\uploads
目录中。
我不知道该怎么做。
这是我的代码。
代码也应该适用于 ubuntu 服务器 VPS 云实例。
swift - 发送到已连接客户端的最佳实践
我正在尝试设计一个 SwiftNIO 服务器,其中多个客户端(如 2 个或 3 个)可以连接到服务器,并且在连接后,它们都可以从服务器接收信息。
为此,我创建了一个共享并添加到连接客户端的每个管道的ServerHandler
类。
上面的代码灵感来自https://github.com/apple/swift-nio/blob/main/Sources/NIOChatServer/main.swift
在ServerHandler
该类中,每当有新客户端连接时,该通道就会添加到数组中。然后,当我准备好向所有客户端发送数据时,我只需遍历 , 中的通道ServerHandler
并调用writeAndFlush
.
这似乎工作得很好,但有几件事我担心:
- 似乎并不真正推荐创建共享处理程序,而是应该为每个客户端创建一个新处理程序。但是,我将如何访问需要向其发送数据的所有客户端通道?(我在由 UI 确定的时间发送数据)
- 为什么
Channel.write
似乎什么也没做?如果我使用Channel.write
而不是writeAndFlush
在服务器中使用,我的客户端将无法接收任何数据。
如果这些问题很愚蠢,我深表歉意,我SwiftNIO
最近才开始接触网络。
如果有人能给我一些见解,那就太棒了。
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 应用程序中打开服务器套接字,请不要犹豫在这里回复。
swift - Vapor (SwiftNIO) 与异步方法的接口
我正在尝试使用第 3 方库中的异步方法从 URL 获取字符串结果
在 Vapor Swift 请求处理程序中。
Apple 的SwiftNIO 文档介绍了这一点:
但
在异步进程提供值之前返回未来的结果
我们如何只在它具有价值之后才返回承诺?