Несколько TIdCmdTCPServer в одном приложении - PullRequest
0 голосов
/ 13 января 2019

Я разрабатываю сервер со многими клиентскими запросами. В зависимости от типа запросов я хочу использовать отдельный TIdCmdTCPServer для каждого типа запроса.

На самом деле, это программное обеспечение для бухгалтерии, которое я хочу разделить для каждой услуги отдельным TIdCmdTCPServer, например, одно для бухгалтерии, другое для инвентаря и т. Д.

Каждый TIdCmdTCPServer будет иметь свой собственный набор обработчиков команд и будет прослушивать свой собственный порт, но все они будут активированы на одном и том же IP и запущены в одном приложении.

В чем недостаток этого подхода?

Могу ли я использовать один TSchedulerThreadPool, общий для всех TIdCmdTCPServer s? Или я должен использовать отдельный TSchedulerThreadPool для каждого?

1 Ответ

0 голосов
/ 13 января 2019

Нет ничего плохого в том, что вы предлагаете. Основным недостатком является просто использование большего количества системных ресурсов для поддержки нескольких серверов в памяти и использование нескольких портов (которые являются конечным ресурсом). Но кроме как в целях организации кода, нет никакого реального преимущества по сравнению с использованием одного порта и определения протокола для предоставления нескольких подмножеств команд, из которых клиент может выбирать.

По крайней мере, один TIdCmdTCPServer может прослушивать несколько портов через свою коллекцию Bindings, и ваши обработчики команд могут посмотреть, с какого порта поступает каждый запрос, если это необходимо. Или вы можете переключиться на стандартный TIdTCPServer и использовать несколько ручных TIdCommandHandlers коллекций, по одному для каждой привязки.

И нет, вы не можете совместно использовать планировщики на нескольких серверах. Каждый сервер требует своего собственного планировщика. Но одному серверу с несколькими привязками требуется только 1 планировщик.

...