我在asp.net应用程序中有很多Singleton实现,并且出于某些性能原因想将我的应用程序移动到IIS Web Garden环境。
CMIIW,使用 n 工作进程迁移到IIS Web Garden,将在每个工作进程中创建一个单独的对象,这使得它不再是单个对象,因为 n > 1。
我可以在IIS Web Garden中再次制作所有这些单例对象吗?
答案 0 :(得分:10)
我不相信你可以(除非你能让那些IIS工作者以某种方式使用共享内存中的对象)。
这是一个范围问题。您的单例实例使用进程空间作为其范围。就像你说的那样,你的实现现在跨越了多个进程。 By definition,在大多数操作系统上,单例将绑定到某个进程空间,因为它绑定到单个类实例或对象。
你真的需要一个单身人士吗?在使用该模式之前,这是一个非常重要的问题。正如维基百科所说,有些人认为它是反模式(或代码气味等)。
可能有效的替代设计示例包括......
我喜欢大型网站的选项3。对于大型网站,配套Windows服务通常非常有用。发送邮件,批处理作业等许多事情应该已经与前端处理工作进程分离。您可以将单例服务器对象推送到该进程,并在IIS工作进程中使用客户端对象。
如果你的单例类使用多个共享状态的对象或只是共享初始状态,那么选项1和2应该分别工作。
修改强>
从您的评论中看起来,分布式缓存形式的第一个选项应该适合您。
那里有很多分布式缓存实现。
PS。因为你专门研究聊天。我绝对建议您研究Comet(Comet implementation for ASP.NET?和WebSync等)