gpt4 book ai didi

C# SSH.NET - 一个 SSH 连接与多个 SSH 连接

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:41 24 4
gpt4 key购买 nike

我有一个使用 SSH.NET 的 C# 应用程序库连接到服务器。应用程序通过多种方式对数据库执行SQL命令。

拥有一个包含所有 SQL 命令的长期运行的 SSH 连接是否更好,例如:

using (var sshClient = getSshClient()))
{
sshClient.Connect();

if (sshClient.IsConnected)
{
using (var portForward = setupPortForward()))
{
sshClient.AddForwardedPort(setupPortForward());
portForward.Start();

// Start SQL commands

if (!sshClient.IsConnected) {
sshClient.Connect();
}
else {
executeSQLCommand1();
}

if (!sshClient.IsConnected) {
sshClient.Connect();
}
else {
executeSQLCommand2();
}

// End SQL commands

portForward.Stop();
sshClient.Disconnect();
}
}
}

或者在每个 SQL 语句的开头打开 SSH 连接?

using (var sshClient = setupSshClient()))
{
sshClient.Connect();

if (sshClient.IsConnected)
{
using (var portForward = setupPortForward()))
{
sshClient.AddForwardedPort(portForward);
portForward.Start();

executeSQLCommand1();

portForward.Stop();
sshClient.Disconnect();
}
}
}

using (var sshClient = setupSshClient()))
{
sshClient.Connect();

if (sshClient.IsConnected)
{
using (var portForward = setupPortForward()))
{
sshClient.AddForwardedPort(portForward);
portForward.Start();

executeSQLCommand2();

portForward.Stop();
sshClient.Disconnect();
}
}
}

已知服务器有时会断开连接,所以我想第二种方法在重新建立连接的“更清洁”逻辑方面更好?或者还有其他更好的重新连接方法吗?

最佳答案

第 1 部分:最小化连接生命周期。

SQL 连接 的一个常见“最佳实践”是您希望最小化连接打开时间 - 这意味着您在执行查询之前打开连接然后关闭它。这同样适用于SSH 连接

在使用后没有处理的悬空资源有一个名称,它们被称为内存泄漏

第 2 部分:使用事务来确保数据库状态的一致性

如果您的 SQL 查询事务中的单个语句失败,则该事务将失败。如果您想失败,请回滚错误 ex: connection dropped 之前的状态 DB,稍后重试。

如果您不需要记录错误,那么您可以在事务之前使用 set xact_abort on 以在出现错误时自动回滚,例如:超时或断开连接。

获取更多信息

第 3 部分:创建重试策略

通常,最佳实践是您不想避免失败,而是接受它,快速失败并有办法重试。您选择哪种重试策略由您决定。

如果您想做比手动重试更复杂的事情,那么我建议您看一下 Rx observable(响应式(Reactive)扩展)或 Polly。它确实有一点学习曲线,但您会习惯的。

 // Policy to retry 5 times, waiting {2, 4, 8, 16, 32} seconds between retries.
var policy = Policy
.Handle<SqlException>()
.WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

policy.Execute(() => UpdateDatabase1(obj1));

关于C# SSH.NET - 一个 SSH 连接与多个 SSH 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com