c# - AppDomain 或每个实例的进程?

标签 c# .net tcp appdomain

我想知道是应该为每个实例使用一个进程,还是应该使用 AppDomains 在单个进程中运行多个实例。

我有一个服务器应用程序,它遵循类似于 telnet 的设计。用户始终通过 TCP 连接,服务器保持客户端 session 的完整状态,该状态显示在工作站上。

该软件需要支持至少 500 个并发连接,可能更多。一个典型的安装将需要 3 到 7 个应用程序实例连续运行,尽管除了一个实例之外的所有实例都只有几个连接(它们用于测试、引用环境等)。在内部,出于开发目的,最多将有 40 个环境,每个环境最多有 20 个并发连接。我的目标主机环境将是 64 位 Windows。

我知道 IIS 使用的模型只有一个进程和多个 AppDomain,但我也可以看到每个实例一个进程的优势。

我应该使用哪个,为什么?

编辑:
不同的实例涉及同一应用程序的不同版本,这些版本不能在单个 AppDomain 中一起运行。此外,不同的实例不必相互通信,仅与用于管理目的的主服务通信。

最佳答案

总结:

  1. 您有类似 telnet 的服务器应用程序。
  2. 您将在同一台机器上运行此应用程序的多个版本。
  3. 不同的实例不需要相互通信;仅使用通用服务。

大概每个实例都通过不同的端口进行通信

有了这些要求,我绝不会考虑构建与 IIS 相同的功能。相反,我会将它们作为完全独立的应用程序运行。

顺便说一句,您说 IIS 只有 1 个进程和多个应用程序域是不正确的。 IIS 可以为单个站点启动多个进程。这称为 Web Garden .此外,IIS 为它拥有的每个应用程序池至少启动一个进程。您可以将它们视为在 IIS 服务器上执行的单独 w3wp.exe 进程。

通过通用进程运行所有内容的唯一好处是,如果主机提供对所有内容都通用的有值(value)的东西。例如日志记录接口(interface)或故障处理。编写、设置和维护起来会非常复杂,而且收效甚微。

最后,用户数量并不重要,因为这将取决于应用程序的资源使用情况。这可能意味着网络、内存,甚至磁盘,具体取决于您的应用执行的功能。

关于c# - AppDomain 或每个实例的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018577/

相关文章:

c# - 将字节数组转换为字节字符串

c# - 正则表达式在 .NET 中返回转义匹配 - 为什么?

.NET 组件模型说明

c - 编程 C : getting error when binding address and port to socket

Android - 通过 TCP/IP 传输数据

tcp - 无法收到 Mirth 的 Ack

C# 在进程内存中搜索字节数组

c# - 为什么这不起作用? (通用等于助手)

c# - 我可以在返回 html 的自定义 Tag Helper 中使用 Tag Helper 吗?

C# - 导入 CSV,其中空字符串不会通过批量导入发送到数据库