Хорошая архитектура для умеренно простого TCP-сервера - PullRequest
2 голосов
/ 26 января 2012

Я планирую внедрить специальный сервер TCP в C на Linux.После небольшого исследования кажется, что есть несколько способов сделать это, в том числе однопоточный, один поток на соединение и другие.Для сокетов есть такие опции, как датаграмма против потока и блокировка против неблокирования.

Большинство сообщений будет выглядеть так:

Client: request id [request info]
Server: status id [response info]

или

Client: request id [request info]
Server: status id [response info]
Client: additional request id [request info]
Server: status id [response info]

Где все <1kB, а большинство <512B.Однако за короткое время может быть много отдельных запросов. </p>

Итак, как мне настроить сервер так, чтобы он работал наиболее эффективно (т. Е. Не занимал ресурсы, не отклонял запросы клиентов)?

1 Ответ

3 голосов
/ 26 января 2012

Я думаю, что ваш вопрос сводится к производительности. Есть ли это?

Если так, три вопроса:

  • Какое среднее / максимальное количество клиентов будет обрабатывать ваш сервер?
  • Постоянно ли соединение, или клиенты подключаются для каждых X запросов?
  • Сколько обработки требуется, когда клиент отправляет новый запрос?

Во всяком случае, я бы начал просто. Сделать его неблокирующим и однопоточным. Профиль и стресс-тест это. Затем, если вас не устраивает представленная производительность, определите основную причину и попытайтесь ее исправить. В качестве окончательного варианта масштабируйте его до одного рабочего потока на ядро ​​процессора.

Если вас не заботит надежность и порядок доставки, вы можете использовать UDP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...