如何识别CORBA服务器中的各种CORBA客户端

时间:2012-01-30 11:15:38

标签: java corba


我创建了一个 CORBA Server和两个客户端 - Client1Client2,服务器使用 Java 实现连接到这个Server。当客户端连接到服务器时,服务器必须保持连接状态,即connected = truefalse

例如,服务器中有两种方法:

  1. connect()
  2. disconnect()
  3. 当客户端调用connect()方法时,此连接状态应保存在此Server的{​​{1}}处。如果同一(已连接)客户端再次调用Client1方法,则connect()应返回错误。
    同样,如果Server在连接之前调用Client2disconnect()必须检测到Server尚未连接并返回错误

    我的问题是如何唯一地标识CORBA客户端?

    任何意见/建议表示赞赏。感谢..

2 个答案:

答案 0 :(得分:2)

CORBA没有精确定义“客户”的概念,因为它对不同的人有很多含义:

  • 客户端的计算机(由IP地址标识)
  • 客户端用于连接服务器的NIC(由MAC地址标识)
  • 客户的流程(由流程ID标识)
  • 客户端与服务器连接的套接字(由文件描述符标识)
  • 该进程中的ORB(由ORB标识符标识,可能传递给ORB::init()
  • 进行调用的进程中的线程(由线程ID标识)

增加复杂性的事实是,其中一些项目(尤其是基于连接的标识)无法在CORBA中可靠地用于标识客户端或跟踪其生命周期,因为允许ORB关闭空闲连接并在以后重新建立它们活动恢复。

解决此问题的最佳方法是将客户端生命周期的管理推送到您的应用程序中,特别是推送到您的IDL中。让客户在“连接”时间请求cookie并在每个后续请求中传递该cookie:

interface Foo {
   void connect(out string cookie) throws AlreadyConnected;
   void doWork(in float data, in string cookie) throws NotConnected;
   void disconnect(in string cookie) throws NotConnected;
};

我的IDL语法可能不完美,但您会明白这一点。您还应该研究透明地发送cookie的方法,而不必使用PortableInterceptors and/or Service Contexts影响您的IDL。

无论您如何传输cookie或会话令牌,您的服务器都必须仔细管理它们并在必要时清除旧的服务器。会话cookie管理可能是服务的真正负担,并妨碍其良好的扩展能力。

答案 1 :(得分:0)

无需考虑那么大,我认为可以使用应用程序控制器模式(A设计模式)来实现

维护一个课程,以某种方式检查谁已登录(通过在数据库或其他你想要的地方检查)

希望这有用。