【发布时间】:2011-01-18 09:35:26
【问题描述】:
我想构建一个最多可供 100 个并发客户端使用的 TCP/IP 服务器,但仍然不知道如何开始。
至少我需要这个服务器:
- 监听客户端,并将它们全部存储在数组或列表中。
- 对于每个客户端,它需要根据自己的客户端状态来接收和发送数据。
- 当有人连接或断开连接时,服务器应该更新客户端列表。
- 更喜欢使用 GUI 作为服务来管理它。
任何人都可以帮助如何开始,我查看了 indy 示例但他们没有帮助,还寻找了大多数组件但仍在搜索。
【问题讨论】:
-
正如其他问题中提到的,如果您的实际客户端数量大于 1000,如果 Indy 设置为每个并发客户端一个线程,则您可能会使用大量内存。使用基于异步或延续的方法,您可以用更少的线程处理更多的连接。 stackoverflow.com/questions/37185/…
-
您可能想查看 Francois Piette 的 ICS 组件并进行比较。有些人觉得 Indy 更适合他们,有些人觉得 ICS 更适合他们。
-
我认为阻塞方法在大多数情况下都是错误的。在会话/对象的整个生命周期内让线程处于活动状态是完全错误的。您只需要一个 taks / 线程池,并且对于每个单独的请求,您都使用该池中的一个线程。这样,您将拥有与同时运行的许多并发请求一样多的线程。祝你好运,甚至达到 100。
-
@Runner,Indy 提供了 3 种调度器:基于线程的调度器,基于线程池的基于线程的调度器,以及基于光纤的调度器。默认情况下,Indy 使用简单的基于线程的调度程序。如果需要线程池,只需将 TIdSchedulerOfThreadPool 实例分配给 IdTCPServer.Scheduler 属性即可。
标签: delphi tcp delphi-2010