FastCGI для порта по сравнению с сокетом

Я настраивал Django на Cherokee сегодня (используя SCGI) и заметил, что в документах Django говорится, что вы можете использовать комбинацию хост / порт или сокет для связи между веб-сервером и Django.

Единственное, что они должны сказать по этому вопросу,

То, что вы выбираете, является способом предпочтения; TCP-сокет обычно проще из-за проблем с разрешениями.

(Между прочим, у меня были проблемы с разрешениями при работе с сокетом, но не с хостом:).)

Я смутно помню, как сокеты работают в моем классе системного программирования, но мне действительно любопытно, какова эффективная разница между ними. Каждый раз, когда есть выбор, есть кто-то с мнением по этому вопросу, поэтому я надеялся получить это. В частности, есть ли разница в производительности?

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

2 ответа

Решение

Сокет UNIX администрируется как файл в файловой системе. Вам необходимо правильно установить значения и разрешения для пользователей / групп. Он также должен быть в любом используемом вами джейл-руте (распространенная ошибка при использовании postfix + mysql).

Вам не нужно делать это для сокета TCP, если вы привязываетесь к порту> 1000.

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

Я думаю, что реальная разница заключается в том, что если у вас действительно высокая скорость соединения с недолговечными соединениями, вы можете исчерпать порты, потому что используемые порты некоторое время остаются в состоянии TIME_WAIT с TCP. Не так с именными сокетами.

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

И снова, сокет TCP также является сокетом.

Другие вопросы по тегам