Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 同一应用程序上有多个TIDCmdtCPServer_Delphi_Tcp_Server_Indy_Indy10 - Fatal编程技术网

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处理命令