Delphi 同一应用程序上有多个TIDCmdtCPServer
我正在开发一个包含许多客户端请求的服务器。根据请求的类型,我想为每种类型的请求使用一个单独的Delphi 同一应用程序上有多个TIDCmdtCPServer,delphi,tcp,server,indy,indy10,Delphi,Tcp,Server,Indy,Indy10,我正在开发一个包含许多客户端请求的服务器。根据请求的类型,我想为每种类型的请求使用一个单独的TIdCmdTCPServer 事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer将每个服务分开,例如一个用于会计,另一个用于库存,等等 每个TIdCmdTCPServer都将有自己的一组命令处理程序,并将侦听自己的端口,但所有端口都将在同一IP上激活,并在同一应用程序中运行 这种方法的缺点是什么 我是否可以使用所有TIdCmdTCPServer共享的单个TSchedulerThre
TIdCmdTCPServer
事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer
将每个服务分开,例如一个用于会计,另一个用于库存,等等
每个TIdCmdTCPServer
都将有自己的一组命令处理程序,并将侦听自己的端口,但所有端口都将在同一IP上激活,并在同一应用程序中运行
这种方法的缺点是什么
我是否可以使用所有
TIdCmdTCPServer
共享的单个TSchedulerThreadPool
?或者我应该为每个线程池使用一个单独的TSchedulerThreadPool
?您的建议没有错。主要缺点是使用更多的系统资源在内存中维护多个服务器,以及使用多个端口(这是一种有限的资源)。但除了代码组织的目的外,仅仅使用一个端口并定义协议来公开客户端可以选择的多个命令子集并没有什么真正的优势
至少,单个TIdCmdTCPServer
可以通过其绑定
集合侦听多个端口,如果需要,您的命令处理程序可以查看每个请求来自哪个端口。或者,您可以切换到标准的TIdTCPServer
并使用多个手动TIdCommandHandlers
集合,每个绑定一个集合
不,您不能在多个服务器之间共享调度程序。每个服务器都需要自己的调度程序。但是具有多个绑定的单个服务器只需要一个调度程序。谢谢@Remy。使用这种方法有两个主要原因:1。为了更好地组织命令处理程序,2:为了在迭代TCPServer的上下文列表时减少循环计数器,因为我需要从服务器向客户端发送消息,我创建了一个新的TIdServerContextClass,其中包含一个客户端消息列表,如您在SO中所述。现在,我使用1个TIdTCPServer向客户端发送消息,使用3个TIdCmdTCPServer处理命令