RMI是一种使用JRMP protocol的Java网络编程API。如果我们使用Wireshark分析数据包,则表明在建立客户端和服务器之间的通信之前,JRMP协议至少需要2次请求交换。
更多细节:第一个请求交换是协商步骤,第二个请求交换是lookup()
步骤,然后其他请求交换是远程过程调用(当我们使用来自我们类的方法扩展{{ 3}})。第一个远程过程调用包含序列化类的属性名称,如果第二次调用相同的方法,则会有一些优化(integer
id将用于每个属性名称而不是{{1} })。
不太详细:JRMP很复杂,因为它需要多个客户端/服务器请求交换。像HTTP这样的协议只需要一个。
考虑到我们正在开发云,我们有多个节点和RMI服务器,我们在RMI客户端和云之间也有一个循环负载均衡器。 RMI客户端发送协商请求,第一个节点接收它,然后负载均衡器将String
请求发送给第二个节点......是否可以在分布式环境中使用RMI?
答案 0 :(得分:1)
第一个请求交换是协商步骤,第二个请求交换是
lookup()
步骤
正确,但这只需要在客户端应用程序的生命周期中发生一次,而不是每次远程方法调用。
RMI客户端发送协商请求,第一个节点收到它,然后负载均衡器将
lookup()
请求发送给第二个节点...
不可能。这两个请求都通过相同的TCP连接 ergo 传输到同一个目标主机。
然后其他请求交换是远程过程调用(当我们使用扩展
Remote
的类中的方法时)。
不一定。对目标对象的请求可以通过不同的连接进行, ergo 它们可以包含另一个协商步骤。无论是否存在负载均衡器,它们也可以从第一个目标主机转到不同的主机。
是否可以在分布式环境中使用RMI?
您必须将您的注册表和所有远程对象复制到所有负载平衡的主机,如果远程对象具有会话相互依赖性,您可能会陷入困境。
使用RMI / IIOP和负载均衡ORB可能会更好。