同一应用程序上的多个TIdCmdTCPServers

时间:2019-01-13 17:18:53

标签: delphi tcp server indy indy10

我正在开发具有许多客户端请求的服务器。根据请求的类型,我想对每种类型的请求使用单独的TIdCmdTCPServer

实际上,这是一个计费软件,我想用单独的TIdCmdTCPServer分隔每个服务,例如,一个用于计费,另一个用于库存,等等。

每个TIdCmdTCPServer都有自己的命令处理程序集,并且将侦听其自己的端口,但是所有这些操作都将在同一IP上激活并在同一应用程序中运行。

这种方法的缺点是什么?

我可以使用所有TSchedulerThreadPool共享的一个TIdCmdTCPServer吗?还是我应该对每个人分别使用TSchedulerThreadPool

1 个答案:

答案 0 :(得分:3)

您的建议没有错。主要缺点在于,使用更多的系统资源来在内存中维护多个服务器,并使用多个端口(这是有限的资源)。但是,除了出于代码组织目的之外,仅使用单个端口并定义协议以公开客户端可以选择的多个命令子集并没有真正的优势。

至少,一个TIdCmdTCPServer可以通过其Bindings集合侦听多个端口,并且如果需要,您的命令处理程序可以查看每个请求来自哪个端口。或者,您可以切换到标准TIdTCPServer并使用多个手动TIdCommandHandlers集合,每个绑定一个。

不,您不能在多个服务器之间共享调度程序。每个服务器都需要自己的调度程序。但是具有多个绑定的单个服务器仅需要一个调度程序。