我想知道是应该为每个实例使用一个进程,还是应该使用 AppDomain
s 在单个进程中运行多个实例。
我有一个服务器应用程序,它遵循类似于 telnet 的设计。用户始终通过 TCP 连接,服务器保持客户端 session 的完整状态,该状态显示在工作站上。
该软件需要支持至少 500 个并发连接,可能更多。一个典型的安装将需要 3 到 7 个应用程序实例连续运行,尽管除了一个实例之外的所有实例都只有几个连接(它们用于测试、引用环境等)。在内部,出于开发目的,最多将有 40 个环境,每个环境最多有 20 个并发连接。我的目标主机环境将是 64 位 Windows。
我知道 IIS 使用的模型只有一个进程和多个 AppDomain
,但我也可以看到每个实例一个进程的优势。
我应该使用哪个,为什么?
编辑:
不同的实例涉及同一应用程序的不同版本,这些版本不能在单个 AppDomain
中一起运行。此外,不同的实例不必相互通信,仅与用于管理目的的主服务通信。
最佳答案
总结:
- 您有类似 telnet 的服务器应用程序。
- 您将在同一台机器上运行此应用程序的多个版本。
- 不同的实例不需要相互通信;仅使用通用服务。
大概每个实例都通过不同的端口进行通信
有了这些要求,我绝不会考虑构建与 IIS 相同的功能。相反,我会将它们作为完全独立的应用程序运行。
顺便说一句,您说 IIS 只有 1 个进程和多个应用程序域是不正确的。 IIS 可以为单个站点启动多个进程。这称为 Web Garden .此外,IIS 为它拥有的每个应用程序池至少启动一个进程。您可以将它们视为在 IIS 服务器上执行的单独 w3wp.exe 进程。
通过通用进程运行所有内容的唯一好处是,如果主机提供对所有内容都通用的有值(value)的东西。例如日志记录接口(interface)或故障处理。编写、设置和维护起来会非常复杂,而且收效甚微。
最后,用户数量并不重要,因为这将取决于应用程序的资源使用情况。这可能意味着网络、内存,甚至磁盘,具体取决于您的应用执行的功能。
关于c# - AppDomain 或每个实例的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018577/