FastCGI для порта по сравнению с сокетом - PullRequest
19 голосов
/ 30 июля 2009

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

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

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

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

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

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

Ответы [ 2 ]

39 голосов
/ 30 июля 2009

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

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

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

6 голосов
/ 30 июля 2009

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

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

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

...