我希望的Cactus
我希望
Cactus
是能够管理多个应用程序的。如果探测一个程序就完整地运行一个Cactus
,对于多个应用程序来说,管理上就会比较混乱
我希望Cactus
能够尽量少得占用服务器的端口资源。对于一些服务器来说,开通个端口可是个老大不容易的事情
我希望Cactus
能够兼顾很强的安全性。在数据传输、文件读取方面做到足够的安全设计
我希望Cactus
能够尽量小的影响应用程序。如果影响太大的话,Cactus
是很容易被放弃的
我的实现想法
Cactus的交互模式
Cactus
应该主要是Client
端+Server
端模式运行的,然后有一个UI
界面用于与用户交互。
Client
可以有很多,每个应用程序对应一个Client
,注册或连接到一个Server
端,与Server
单独通讯,互不影响。
Cactus的通讯方式
Client
端与Server
端的通讯应该是双向的。Client
端可以把数据发给Server
端,Server
端也可以把指令下发到Client
端,实现双向通讯。同时兼顾到应用程序所在服务器的端口占用情况,理想的状态是不使用一个固定的端口,由Client
端主动向Server
端发起连接,并保持连接不断开,这样应用程序所在主机就不需要做什么操作了,只需要保证能够连通到Server
端所在的主机就可以了。
Cactus的安全设计
通讯传输的每一条数据都应该是加密的,同时也要兼顾加解密的效率。Client
端与Server
端使用AES
算法通过约定的足够复杂的密码加密通讯数据。在UI
交互端,也应该使用https
的方式对通讯信息进行安全保证。
Cactus-Client的运行方式
Client
端应该是运行在应用程序上并使用不同的类加载器加载的。使用某种特定的方式,将Client
程序附着在应用程序上,与应用程序共用一个JVM
实例。Client
运行需要加载自己的类和类库,以实现Client
的功能,Client
加载的类和类库,是不应该与应用程序共用的(Client
需要的类和类库由额外的类加载器加载,但Java的系统类是不在此列的,比如包名为java
开头的)。如果应用程序和Client
共同引用了一个类库,但版本不一致(同一个类加载器加载相同名称的类时只会加载一个),那么就有可能导致应用程序或Client
运行出现问题。