Методологии проектирования серверных приложений - PullRequest
1 голос
/ 12 ноября 2008

Во время обучения я решил пройти курс сетевого программирования, используя сокеты POSIX для Linux. В качестве ссылки мы использовали книгу «Межсетевое взаимодействие с использованием TCP / IP» (Comer and Stevens). 2008 - это довольно устаревший и все еще пригодный для использования текст, который использует один или несколько проектов серверов

Один дизайн, который на самом деле не описан в книге, - это случай, когда клиент подключается к внутреннему серверу приложений и отправляет несколько запросов на сервер через одно TCP-соединение. Поскольку множество запросов поступает через подчиненный сокет на сервер, а ответы отправляются через один и тот же подчиненный сокет. Подчиненный сокет становится перегруженным, так как ответ и запросы принимаются через один и тот же сокет. Будет ли лучшим вариантом предусмотреть второе TCP-соединение между конечными точками для обеспечения полнодуплексной скорости связи? Какие еще архитектуры можно использовать для повышения производительности сервера?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2008

Поскольку сокет - это просто число, присоединенное к пакету (назовите его номером маршрутизации или адресом), я не могу себе представить, что сам сокет перегружен.

Ваш код, обрабатывающий сокет, может, но это довольно легко исправить, распределяя пакеты по мере их поступления.

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

Но я действительно не вижу первоначального предположения как абсолютно точного. Я могу ошибаться ...

1 голос
/ 12 ноября 2008

TCP-соединения уже полнодуплексные. Вы можете (упростить вещи) думать о TCP-соединении как о паре однонаправленных соединений (одно отправляющее и одно получающее).

Отправка нескольких запросов по одному соединению фактически используется для увеличения производительности по нескольким протоколам (поскольку повторное использование соединения позволяет избежать рукопожатия и издержек медленного запуска) Одним из примеров могут быть HTTP-соединения с поддержкой активности. Другой способ повысить производительность - использовать конвейерную обработку (отправка нескольких запросов без ожидания ответов), что, очевидно, может быть сделано только в том случае, если вы повторно используете TCP-соединение для нескольких запросов.

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