6

我将 Jsch 放入 commons-pool(带有弹簧池支持)并取得了初步成功

http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#aop-ts-pool

然而:

  1. 我们应该在 Session 中汇集频道而不是汇集会话吗?每个 Jsch 会话创建一个线程。池化 Jsch 会话将创建 x 个线程。池化通道,真的会只有一个 Jsch 线程。

  2. (commons-pool) 如果 Jsch 会话过时会发生什么?如何在公共池的上下文中重新生成会话或使用弹簧池支持?如何检测它是否过时?

谢谢

4

2 回答 2

7

想出了我自己的问题。我将在接下来的一两天内分享我的项目。

  1. 池化渠道更有效。确实不需要创建多个会话(如果会话连接到同一个 sftp 端点)。

  2. 我用spring pool和commons-pool实现了一个JSch连接池(池通道)。我将在接下来的一两天内发布到 github。最重要的问题是,如果连接失效了怎么办。

我发现基于我对 1 Session 的实现 - 多个通道,如果连接过时,池中的对象(在本例中为通道)将过时。池化对象应失效并从池中删除。当连接恢复时,当新的应用程序线程从池中“借用”时,将创建新的池对象。

为了验证我的观察,我的不那么自动化的测试:

a) 创建一组(比如 10 个)应用程序线程,从池中检出通道资源。b) 让线程休眠 20 秒 c) 创建另一组应用程序线程,从池中检查通道资源。

a),在i==7时设置断点,通过“iptable drop (linux) or pfctl -e; pfctl -f /etc/pf.conf (mac, google how to do!)”断开连接。由于通道已损坏,这第一组应用程序线程将出现异常。

b)处,重启连接

在 c) 处,第二组应用线程将成功完成操作,因为断开的连接已恢复。

于 2013-11-05T17:54:40.827 回答
2

抱歉花了点时间……我绝不会忽视这一点的重要性。

哒哒...介绍

https://bitbucket.org/adubflow/sftpconnectionpool/wiki/Home

期待您的评论,输入,以便我改进。

真挚地,

于 2014-02-03T17:29:13.013 回答