【问题标题】:How to do a session pattern with callbacks?如何使用回调进行会话模式?
【发布时间】:2016-09-19 06:03:24
【问题描述】:

我知道如何在没有回调的情况下进行会话模式,例如How to organize RMI Client-Server architecture。但我不知道如何处理回调。登录时是否需要另一个会话对象让客户端传递给服务器?如果是,我将它保存在服务器端的哪里:在服务器会话中保存客户端会话的引用,或者在其他地方(如登录服务器)保存所有客户端会话的集合?如果没有,实现客户端回调方法的对象是什么?

也许有人可以在我链接的问题中给出一个代码示例,因为那个很清楚,我没有找到回调。

答案不一定是严格的 RMI,但我看到很多关于此的问题没有答案,所以我添加了标签。

【问题讨论】:

  • 感谢我在此帮助他人后立即对我在此站点上的第一个问题没有任何解释的反对票。很不错

标签: java session design-patterns callback rmi


【解决方案1】:

您需要一个远程对象 让客户端传递到服务器,在服务器上调用回调。鉴于您在登录时提供它,它很可能是一个会话对象,但这里没有足够的信息来确定。这取决于你想要它是什么。

如果您希望将其作为会话对象,即会话独有且无法继续存在的对象,则应确保:

  1. 客户端在注销时将其取消导出,并且
  2. 当注销发生时,服务器会丢失对此对象的引用,这很容易通过将其存储在服务器分配的会话对象中来完成。

【讨论】:

  • 好的,我已经在做 1 和 2 了。当您说“会话对象当然也包含回调”时,我感到困惑。在这里的另一个答案stackoverflow.com/questions/35781694/…。我不明白服务器会话对象是否包含客户端会话或类似的东西,因为您说“也”。请问你是什么意思?
  • 这和我在(2)的这个答案中所说的完全一样。
  • 嗯,好的,是的。那么回调会话是否有任何理由实现未引用,或者服务器会话是否足够实现它,因为对客户端会话的唯一引用是通过它?第二件事:现在服务器应该保留一个服务器会话对象的列表/映射,如果它想做一些事情,比如向所有客户端发送消息,它可以用来获取客户端会话对象,对吗?
  • 回调对象应该实现Unreferenced 或者客户端应该在会话完成后专门取消导出它。你的选择。服务器不需要会话对象列表。每个客户端都有自己的会话存根,它调用会话上的远程方法,会话执行它所做的任何事情并调用存储在其中的回调。我看不出还有什么需要。
  • 抱歉,我仍然不知道如何处理这种情况:1 个客户端通过在服务器会话对象上调用方法 distributeMessage 向所有其他客户端发送消息。该服务器会话对象可以调用该客户端上的回调方法,因为它拥有对其会话对象的引用,但是该服务器会话对象如何调用所有其他客户端会话对象上的方法(sendMessageToClient)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多