【问题标题】:Singleton and Client Activated Object(CAO), Remoitng单例和客户端激活对象 (CAO),Remoitng
【发布时间】:2010-07-06 06:45:43
【问题描述】:

两者都执行相同的操作

MSDN

  • Singleton: ""Single Call 对象服务一个且只有一个请求进来......"
  • CAO:“客户端激活对象 (CAO) 是根据客户端请求激活的服务器端对象......”

在这两种情况下,数据都是不共享的,但是在单例中,一次只能连接一次客户端,为什么有人想要这样 Singleton在什么场景下有用,还有什么区别?

【问题讨论】:

    标签: .net singleton remoting .net-remoting


    【解决方案1】:

    你看错了台词。这是来自 MSDN 的定义。我突出显示(粗体)这些对象之间的一些差异。

    • 单次通话

      单一呼叫对象服务一个且只有一个请求进入。单身的 调用对象在场景中很有用 对象需要做的地方 有限的工作量。 单次通话 对象通常不需要 存储状态信息,它们 之间不能保存状态信息 方法调用。但是,单次通话 对象可以配置在 负载均衡的时尚。

    • 单例对象

      单例对象是那些为多个客户端提供服务的对象 因此通过存储状态来共享数据 客户之间的信息 调用。它们在某些情况下很有用 需要共享数据的地方 在客户之间以及在 创建的开销和 维护对象很重要。

    • 客户端激活对象 (CAO)

      客户端激活对象 (CAO) 是服务器端对象, 根据要求激活 客户。这种激活服务器的方式 对象与经典非常相似 COM coclass 激活。当。。。的时候 客户端向服务器提交请求 使用“new”运算符的对象,一个 激活请求消息被发送到 远程应用程序。服务器 然后创建一个实例 请求的类并返回一个 ObjRef 回到客户端应用程序 调用它。然后创建一个代理 客户端使用 ObjRef。这 客户端的方法调用将被执行 在代理上。 客户端激活的对象 可以存储状态信息 方法调用其特定的客户端 而不是跨越不同的客户 对象。每次调用“新” 将代理返回给独立的 服务器类型的实例。

    状态信息是您存储在对象的变量或属性中的一些数据,用于处理客户端请求。

    由于单个调用对象是在客户端请求它做一些工作时创建的,并在它完成工作后销毁,它不能保存状态信息,因为每个请求都会创建一个新对象(它可以在数据源中加载和存储数据,以完成工作)。

    Singleton 对象 只创建一次(可能在服务器启动时),并且只要服务器进程正在运行,它就会一直存在。它可以将信息存储在变量和属性中以处理客户端请求,因为每个客户端都使用相同的对象,并且在客户端调用后不会被销毁。

    显示单个调用和单个对象之间差异的一个简单示例是创建一个方法 Increment() 来增加对象中的变量(整数)并将变量写入控制台。单个调用对象将始终将相同的值打印到控制台(如果变量以 0 开头,则为 1),而单例对象将始终在每次调用后打印一个递增的值(1、2、3 等)。

    【讨论】:

    • 哦,那么状态信息是什么意思呢? (对不起,在一个好的答案之后又提出了一个愚蠢的问题)
    • @KiNGPiN:我已经用一些关于“状态信息”的信息更新了我的答案
    • 哦,太好了...明白了谢谢 :)
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2017-05-31
    相关资源
    最近更新 更多