我创建了一个 CORBA Server
和两个客户端 - Client1
和Client2
,服务器使用 Java 实现连接到这个Server
。当客户端连接到服务器时,服务器必须保持连接状态,即connected = true
或false
例如,服务器中有两种方法:
connect()
disconnect()
当客户端调用
connect()
方法时,此连接状态应保存在此Server
的{{1}}处。如果同一(已连接)客户端再次调用Client1
方法,则connect()
应返回错误。Server
在连接之前调用Client2
, disconnect()
必须检测到Server
尚未连接并返回错误我的问题是如何唯一地标识CORBA客户端?
任何意见/建议表示赞赏。感谢..
答案 0 :(得分:2)
CORBA没有精确定义“客户”的概念,因为它对不同的人有很多含义:
ORB::init()
)增加复杂性的事实是,其中一些项目(尤其是基于连接的标识)无法在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设计模式)来实现
维护一个课程,以某种方式检查谁已登录(通过在数据库或其他你想要的地方检查)
希望这有用。