【问题标题】:Multiple TIdCmdTCPServers on same application同一应用程序上的多个 TIdCmdTCPServer
【发布时间】:2019-06-07 20:06:42
【问题描述】:

我正在开发一个包含许多客户端请求的服务器。根据请求的类型,我想为每种类型的请求使用单独的TIdCmdTCPServer

其实它是一个会计软件,我想用一个单独的TIdCmdTCPServer将每个服务分开,例如一个用于会计,另一个用于库存,等等。

每个TIdCmdTCPServer 都有自己的一组命令处理程序,并且会监听自己的端口,但所有的都将在同一个 IP 上激活并在同一个应用程序中运行。

这种方法有什么缺点?

我可以使用所有TIdCmdTCPServers 共享的单个TSchedulerThreadPool 吗?或者我应该为每个人使用一个单独的TSchedulerThreadPool

【问题讨论】:

    标签: delphi tcp server indy indy10


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢@Remy。使用这种方法有两个主要原因:1. 组织更好的命令处理程序,2:在迭代 TCPServer 的上下文列表时减少循环计数器,因为我需要从服务器向客户端发送消息,我创建了一个新的 TIdServerContextClass如您之前在 SO 中提到的客户的消息列表。现在我使用 1 个 TIdTCPServer 向客户端发送消息,使用 3 个 TIdCmdTCPServer 处理命令
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2013-05-03
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多