服务器如何与 RMI 中的客户端建立会话

Posted

技术标签:

【中文标题】服务器如何与 RMI 中的客户端建立会话【英文标题】:How a server can make a session with a client in RMI 【发布时间】:2012-12-25 01:34:16 【问题描述】:

我希望有人告诉我在哪里搜索如何在 RMI 中建立客户端和服务器之间的会话,即用于搜索目的的概念名称是什么?

【问题讨论】:

【参考方案1】:

我在 2001 年的书中将其命名为远程会话模式。

这个想法是有一个单一的 RMI 对象,绑定在注册表中,只有一个 login() 方法。如果成功,该方法会为每个调用返回一个新的 RemoteSession 对象,其中包含会话所需的 API。 RemoteSession 当然是另一个远程接口。它还包含一个logout() 方法,用于取消导出对象,它还实现了Unreferenced,作为终止会话的另一种方式。

RemoteSession 的每个实例都可以维护客户端状态,因此它是一个会话对象,并且由于获取 RemoteSession 对象的唯一方法是通过login(),因此它在第一个近似值上是安全的。

【讨论】:

这本书叫什么名字? 好的,现在我们有了实现引用的远程服务器对象,这个对象什么时候会被GC?我希望在此用户注销时将此对象发送到 GC,以便终止与该用户的会话,如果我们在同一会话中有多个用户(两个用户互相聊天)会怎样?我们跟踪会话? 1. java.rmi:Java 远程方法调用指南。 2. 当分配给它的客户端释放存根、退出 JVM 等时,它是 GCd。按照我描述的方式,同一会话中不能有多个用户,以响应您最初描述的方式您现在正在更改的问题,但它确实概括为:logout() 方法需要跟踪其客户端数量何时变为零,然后自行取消导出。 unreferenced() 方法的工作原理相同。 但是为什么将向客户端返回会话的登录对象是单例的呢? @Eslam 因为它绑定在注册表中。客户必须从某个地方开始。

以上是关于服务器如何与 RMI 中的客户端建立会话的主要内容,如果未能解决你的问题,请参考以下文章

使用 RMI 在 Java 中的两个服务器之间连接

通过 RMI 发送存储在 ArrayList 中的数据 [关闭]

什么是 RMI 注册表

RMI 服务器如何响应多个 RMI 客户端调用?

ZooKeeper客户端源码——向服务端建立连接+会话建立+心跳保持长连接

回调中的 RMI 连接失败检测