【问题标题】:Best Component for Client-server with thousands client [closed]具有数千个客户端的客户端服务器的最佳组件[关闭]
【发布时间】:2013-05-10 08:50:18
【问题描述】:

对于涉及数千个客户端而所有连接都必须保持活动状态的客户端-服务器 (TCP) 应用程序,什么是最佳组件?
到目前为止,我在服务器应用程序中使用了 Indy 和一个 TIdTCPServer,在所有客户端应用程序中使用了一个 TIdTCPClient。我希望客户端和服务器都可以随时发送任何大小的数据。
这是一个好方法吗?

【问题讨论】:

  • 某事related
  • 参见this blog entry about DataSnap concurrent access - 听起来确实像 Indy 不能很好地扩展。如果有第 1000 个客户端,请查看 IOCP/事件驱动服务器,例如 realthinclient.com 或我们的开源 mormot.net
  • @ArnaudBouchez 你有 RTC 使用 IOCP 的参考/指针吗?
  • @mjn 这是他们网站各处的前提。引用:“与大多数其他 Internet 组件不同,RTC 连接组件是非阻塞和事件驱动的。这意味着,即使不使用多线程模式,您的用户也不会在通信过程中被阻塞(“应用程序无响应”)您的客户端和服务器。对于连接中的每个状态更改,都会触发一个事件。也许他们没有使用 IOCP WinAPI,但至少,他们使用了事件驱动的服务器设计,这是唯一一个可以扩展到数千个客户端的设计。

标签: delphi delphi-xe2 indy10


【解决方案1】:

它可能会起作用,但也可能最终会出现很多问题,具体取决于数据类型、负载、安全性等。我最终使用了一个网络服务器(Tomcat + Comet)。工作已经完成:套接字稳定性、框架、安全性、跨多个实例的负载共享等...... 处理数千个客户端并不容易......然后您可以专注于您的应用程序,并且只专注于它。

【讨论】:

  • +1,Java(Netty、Servlets)在techempower.com/blog/2013/04/05/frameworks-round-2中排名靠前
  • -1 AFAIK Indy 没有实现 IOCP,因此将为每个客户端连接创建一个线程。因此,它无法处理数千个客户端,而不会触发 Out Of Memory 错误。这里需要 IOCP/EventDriven 服务器,而 Indy 没有这种架构。 @mjn Java 服务器超出了范围,在这个问题的上下文中,我担心。只是比较一下“hello world”JSON请求背后的内存消耗。 :)
  • @ArnaudBouchez :客户端只会消耗 1 个线程......因为它是客户端;)。在服务器端,我不会使用 indy 或 Delphi 来构建服务器(我为什么要重建轮子?)。
  • @GregM。当然,我说的是服务器端。请再次阅读主要问题。它是关于使用 Indy 服务器处理数千个连接的 服务器 端能力。由于 Indy 的设计,这还不可能。处理数以千计的客户端非常容易,无需重新发明轮子,而是依赖经过验证的 IOCP/EventDriven 服务器——它存在于 Delphi 风格中。无需切换到 Java,这肯定会给服务器端进程增加很大的开销。
  • @ArnaudBouchez :我误读了您的答案,因为它是对我的答案的评论,而且我说的是德尔福服务器以外的东西:)。 Java 不是解决方案,只是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多