同一应用程序上的多个 TIdCmdTCPServers
Multiple TIdCmdTCPServers on same application
我正在开发一个有很多客户端请求的服务器。根据请求的类型,我想为每个类型的请求使用单独的TIdCmdTCPServer
。
事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer
来分离每个服务,例如一个用于会计,另一个用于库存,等等。
每个 TIdCmdTCPServer
都有自己的一组命令处理程序,并且会监听自己的端口,但所有这些都将在同一个 IP 上激活,运行 在同一个应用程序中。
这种方法的缺点是什么?
我可以使用一个由所有 TIdCmdTCPServer
共享的 TSchedulerThreadPool
吗?或者我应该为每个使用单独的 TSchedulerThreadPool
吗?
你的提议没有问题。主要缺点是使用更多的系统资源在内存中维护多个服务器,并使用多个端口(这是一种有限的资源)。但除了用于代码组织目的之外,与仅使用单个端口并定义协议以公开客户端可以选择的多个命令子集相比,没有真正的优势。
至少,单个 TIdCmdTCPServer
可以通过其 Bindings
集合侦听多个端口,如果需要,您的命令处理程序可以查看每个请求来自哪个端口。或者,您可以切换到标准 TIdTCPServer
并使用多个手动 TIdCommandHandlers
集合,每个集合一个。
不,您不能在多个服务器之间共享调度程序。每个服务器都需要自己的调度程序。但是具有多个绑定的单个服务器只需要 1 个调度程序。
我正在开发一个有很多客户端请求的服务器。根据请求的类型,我想为每个类型的请求使用单独的TIdCmdTCPServer
。
事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer
来分离每个服务,例如一个用于会计,另一个用于库存,等等。
每个 TIdCmdTCPServer
都有自己的一组命令处理程序,并且会监听自己的端口,但所有这些都将在同一个 IP 上激活,运行 在同一个应用程序中。
这种方法的缺点是什么?
我可以使用一个由所有 TIdCmdTCPServer
共享的 TSchedulerThreadPool
吗?或者我应该为每个使用单独的 TSchedulerThreadPool
吗?
你的提议没有问题。主要缺点是使用更多的系统资源在内存中维护多个服务器,并使用多个端口(这是一种有限的资源)。但除了用于代码组织目的之外,与仅使用单个端口并定义协议以公开客户端可以选择的多个命令子集相比,没有真正的优势。
至少,单个 TIdCmdTCPServer
可以通过其 Bindings
集合侦听多个端口,如果需要,您的命令处理程序可以查看每个请求来自哪个端口。或者,您可以切换到标准 TIdTCPServer
并使用多个手动 TIdCommandHandlers
集合,每个集合一个。
不,您不能在多个服务器之间共享调度程序。每个服务器都需要自己的调度程序。但是具有多个绑定的单个服务器只需要 1 个调度程序。