gpt4 book ai didi

java - 如何保持 SSH 连接可用?

转载 作者:行者123 更新时间:2023-12-01 15:41:52 24 4
gpt4 key购买 nike

我正在编写一个使用 sshj 库进行 SSH 连接的应用程序。用户从菜单中打开“连接”对话框,输入登录数据并单击“连接”按钮建立连接。然后用户从不同的面板和框架执行各种操作。我的问题是:我应该在哪里保留此连接,以使其可供每个需要它的面板和框架使用,直到用户单击“断开连接”按钮?我考虑过在一些自定义类中使用静态字段,但我不相信这样做。你有什么想法?

最佳答案

听起来您对某种类型的池感兴趣。

您可以通过不同的方式来做到这一点。一种方法是拥有一个处理所有连接的类,它是一种单例。然后,您只需向池请求连接即可,例如

SSHConnection con = ConnectionPool.getConnection(host, port);

您也可以使用代理来实现此目的。在代理中,您实际上获得的是占位符而不是实际的连接。代理与其他实例共享信息,有点像

class ConnectionProxy {
private static SSHConnection connection;
}

连接变量是共享的,当你创建一个新的ConnectionProxy时,你实际上会得到旧的连接,但看起来你得到的是一个新的连接。

另一种选择是简单地将实例传递给所有需要它的类。这将使您能够跟踪谁做了什么,但您将失去从任何您想要的地方获取连接的灵 active 。

如果您正在调试,传递一个实例将会有所帮助,像这样思考。你在一个拥挤的房间里,盒子里放着一些钱,需要 key 才能打开。如果你把 key 交给一个人(需要它的类(class)),然后离开房间回来,钱就不见了,你可以责怪那个人。相反,如果您只是将 key 留在盒子旁边的 table 上(实例是全局的)并离开房间,回来时发现钱不见了,那么祝您好运,找出是谁拿走了它。

引用文献:
*]Proxy pattern - WikiPedia

<小时/>

代理示例

更具体地说,它可能看起来像这样:

public class ConnectionProxy implements Connectable {

// where Connectable is some shared interface between ConnectionProxy
// and SSHConnection. The proxy should "look like" a connection, it just
// hides the actual connection behind the scenes.

private static SSHConnection connection;

public ConnectionProxy() { }

public ConnectionProxy(String host, int port) {
connection = new SSHConnection(host, port);
}

public void connect(String host, int port) {
if (isConnected()) {
return;
}
connection = new SSHConnection(host, port);
}

public void reconnect() {
connection = new SSHConnection(connection.getHost(), connection.getPort());
}

public boolean isConnected() {
return connection != null && connection.isConnected();
}
}

您可以通过实例化或连接该类来使用该类。

class Program {
public void sendMessage() {
ConnectionProxy proxy = new ConnectionProxy();
if (!proxy.isConnected()) {
// I guess noone connected it
return;
}
proxy.sendBytes();
}
}

并在连接对话框中实例化或连接 ConnectionProxy。您可以添加对多个连接(即不同的主机和端口)的支持,只需将变量连接设置为列表,然后检查主机和端口是否有正确的连接即可。您基本上创建了一个连接池,但对于客户端类来说,它看起来像是正在创建连接。

关于java - 如何保持 SSH 连接可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923811/

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