有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将Jsch放入连接池的细节

我将Jsch放入了commons池(支持spring池),并取得了初步成功

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

然而:

  1. 我们是否应该在会话中共享通道,而不是共享会话?每个Jsch会话创建一个线程。共享Jsch会话将创建x个线程。在共享通道时,实际上只有一个Jsch线程

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

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    1. 共用通道更有效。实际上不需要创建多个会话(如果会话连接到同一个sftp端点)

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

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

    为了验证我的观察结果,我的非自动化测试:

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

    在a)处,当i==7时设置断点,通过“iptabledrop(linux)或pfctl-e;pfctl-f/etc/pf.conf(mac,googlehowto!)断开连接。第一组应用程序线程将出现异常,因为通道已断开

    在b),重新启动连接

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