Я пытаюсь реализовать TCP-сервер, который является частью более крупного проекта. В основном сервер должен иметь возможность поддерживать TCP-соединение с любым количеством клиентов (минимум 32) и обслуживать любого клиента, который запрашивает обслуживание. В нашем сценарии дело в том, что предполагается, что, как только клиент будет подключен к серверу, он никогда не закроет соединение, если не произойдет какой-либо сбой (например, машина, на которой работает клиент, разрывается), и она будет повторно запрашивать услугу из сервер. То же самое происходит со всеми другими клиентами i-e, каждый из которых будет поддерживать соединение с сервером и выполнять транзакции. поэтому для подведения итогов сервер будет в то же время поддерживать соединение с клиентами, одновременно обслуживая каждый клиент по мере необходимости, а также должен иметь возможность принимать любые другие клиентские соединения, которые хотят подключиться к серверу.Multi Threaded Server design
Теперь я реализовал вышеуказанные функции, используя системный вызов API-интерфейсов berkely, и работает отлично, когда у нас небольшое количество клиентов (скажем, 10). Но сервер должен быть масштабирован до максимально возможного уровня, поскольку мы его реализуем на 16-ядерном компьютере. Для этого я просмотрел различные методы многопоточной обработки e-g одним потоком для каждого клиента и т. Д., И лучший из них, по моему мнению, будет проектом пула потоков. Теперь, когда я собирался реализовать это, я столкнулся с некоторыми проблемами: Если я определяю основной поток, чтобы принимать любое количество входящих соединений и сохранять каждое соединение Файловый дескриптор в структуре данных, и у меня есть пул потоков, как бы я мог получить потоки, чтобы опросить, является ли конкретный клиент запрашивающим обслуживание или нет. Дизайн достаточно прост для сценариев, в которых клиент связывается с сервером, и после получения услуги он закрывает соединение, чтобы мы могли выбрать поток из пула, обслуживать клиента, а затем вставлять его обратно в пул для последующей обработки соединения. Но когда мы должны обслуживать набор клиентов, которые поддерживают соединение и запрашивают услуги с перерывами, какой будет лучший подход для этого. Вся помощь будет очень признательна, поскольку я действительно застрял в этом. Спасибо.
Вставьте свой код, давайте это прочитаем. Что не так с Apache? – YumYumYum
Мне нужно разработать сервер на системном независимом языке C с использованием SOCKET API. – Abdullah