如何使用 Swift-Nio 连接到 MySQL 数据库
How to Connect to MySQL datbase using Swift-Nio
我使用节点 js 连接 mysql 服务器并且运行良好。我用的是node js开发的API,在本地macOS app中使用。问题是在 workbench 上从 mysql 数据库查询数据很快,但在节点 js API 中查询数据非常延迟。所以,我必须直接从我的 macOS 应用程序连接 mysql 数据库。
我从这里安装了 mysql:https://www.mysql.com/downloads/
另外,我正在使用 mysql 工作台测试连接,并且连接没有任何问题。因此,在系统首选项中,我有一个 mysql 扩展来启动和停止 mysql 服务器。在扩展中,我可以看到根文件夹位于 /usr/local/mysql
我创建了新项目并添加了 mysql-nio from here
的 swift 包
在该存储库中,他们的 API 文档 link 已损坏 https://api.vapor.codes/mysql-nio/master/MySQLNIO/ But I found the correct link https://api.vapor.codes/mysql-nio/main/MySQLNIO/MySQLConnection/
通过使用 link,我尝试连接以下代码,
//https://github.com/vapor/mysql-nio
import Cocoa
import MySQLNIO
class ViewController: NSViewController {
private var group: EventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 4)
private var eventLoop: EventLoop {
return self.group.next()
}
override func viewDidLoad() {
super.viewDidLoad()
do{
let socketAddress = try SocketAddress(ipAddress: "127.0.0.1", port: 3306)
let logger = Logger(label: "MyLogger")
let connection = MySQLConnection.connect(to: socketAddress, username: "root", database: "MyDB", password: "3$@sdRt34@sdf$dja2", tlsConfiguration: nil, serverHostname: nil, logger: logger, on: eventLoop)
connection.whenComplete { result in
switch result{
case .success(let connection):
print("Success! Status closed: \(connection.isClosed)")
case .failure(let error):
DispatchQueue.main.async {
NSApp.presentError(error)
}
}
}
}catch{
NSApp.presentError(error)
}
}
}
错误:
The operation couldn’t be completed. (NIOCore.IOError error 1.)
我在 xcode 项目 info
中添加了 App Transport Security Settings
-> Allow Arbitrary Loads
到 YES
我不知道如何解决这个问题。你能帮我解决这个问题吗?谢谢!
在应用沙箱中,您需要启用“传出连接(客户端)”,然后它应该可以工作。
不幸的是,由于 Swift bug,如果您执行 localizedDescription
,Swift 错误的错误打印输出实际上没有用。要查看实际错误,您需要在错误处理程序中放入类似 print(error)
的内容。
看看下面的屏幕截图,如果我不检查“传出连接(客户端)”,print(error)
会打印出实际有用的文本,例如 connect(descriptor:addr:size:): Operation not permitted (errno: 1)
?
我使用节点 js 连接 mysql 服务器并且运行良好。我用的是node js开发的API,在本地macOS app中使用。问题是在 workbench 上从 mysql 数据库查询数据很快,但在节点 js API 中查询数据非常延迟。所以,我必须直接从我的 macOS 应用程序连接 mysql 数据库。
我从这里安装了 mysql:https://www.mysql.com/downloads/
另外,我正在使用 mysql 工作台测试连接,并且连接没有任何问题。因此,在系统首选项中,我有一个 mysql 扩展来启动和停止 mysql 服务器。在扩展中,我可以看到根文件夹位于 /usr/local/mysql
我创建了新项目并添加了 mysql-nio from here
的 swift 包在该存储库中,他们的 API 文档 link 已损坏 https://api.vapor.codes/mysql-nio/master/MySQLNIO/ But I found the correct link https://api.vapor.codes/mysql-nio/main/MySQLNIO/MySQLConnection/
通过使用 link,我尝试连接以下代码,
//https://github.com/vapor/mysql-nio
import Cocoa
import MySQLNIO
class ViewController: NSViewController {
private var group: EventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 4)
private var eventLoop: EventLoop {
return self.group.next()
}
override func viewDidLoad() {
super.viewDidLoad()
do{
let socketAddress = try SocketAddress(ipAddress: "127.0.0.1", port: 3306)
let logger = Logger(label: "MyLogger")
let connection = MySQLConnection.connect(to: socketAddress, username: "root", database: "MyDB", password: "3$@sdRt34@sdf$dja2", tlsConfiguration: nil, serverHostname: nil, logger: logger, on: eventLoop)
connection.whenComplete { result in
switch result{
case .success(let connection):
print("Success! Status closed: \(connection.isClosed)")
case .failure(let error):
DispatchQueue.main.async {
NSApp.presentError(error)
}
}
}
}catch{
NSApp.presentError(error)
}
}
}
错误:
The operation couldn’t be completed. (NIOCore.IOError error 1.)
我在 xcode 项目 info
App Transport Security Settings
-> Allow Arbitrary Loads
到 YES
我不知道如何解决这个问题。你能帮我解决这个问题吗?谢谢!
在应用沙箱中,您需要启用“传出连接(客户端)”,然后它应该可以工作。
不幸的是,由于 Swift bug,如果您执行 localizedDescription
,Swift 错误的错误打印输出实际上没有用。要查看实际错误,您需要在错误处理程序中放入类似 print(error)
的内容。
看看下面的屏幕截图,如果我不检查“传出连接(客户端)”,print(error)
会打印出实际有用的文本,例如 connect(descriptor:addr:size:): Operation not permitted (errno: 1)
?