2009-07-29 19 views
18

Przygotowałem dziś Django na Cherokee (przy użyciu SCGI) i zauważyłem, że the Django docs mówi, że możesz użyć kombinacji host/port lub gniazdo do komunikacji między serwerem internetowym i Django.FastCGI na porcie vs. na gnieździe

Jedyne co mają do powiedzenia w tej sprawie jest

Co wybrać to sposób preferencji; gniazdo TCP jest zwykle łatwiejsze z powodu problemów z uprawnieniami.

(Nawiasem mówiąc, miałem problemy z uprawnieniami do tego przy pomocy gniazda, ale nie z hostem :).)

Niejasno pamiętam, jak gniazda działają z mojej klasy programowania systemów, ale jestem naprawdę ciekawy, jaka jest skuteczna różnica między tymi dwoma. Za każdym razem, gdy jest coś do wyboru, jest ktoś z opinią w tej sprawie, więc miałem nadzieję, że to dostanę. W szczególności czy jest jakaś różnica w wydajności?

Albo, jeśli to w ogóle nie ma znaczenia, chciałbym tylko potwierdzić, więc mogę kontynuować programowanie i zignorować to sysadmin-y.

+0

Zarówno gniazdo TCP, jak i gniazdo o nazwie unix będą gniazdami. Z którym masz problemy? – Thomas

+0

To było jakiś czas temu, ale wydaje mi się, że pamiętam, że musiałem wskazywać lighttpd w pliku .sock na moim systemie plików, który jest nazwanym gniazdem, prawda? Ugh, muszę przeczytać więcej na ten temat. –

Odpowiedz

36

Gniazdo UNIX jest administrowane jako plik w systemie plików. Musisz poprawnie ustawić wartości użytkownika i grupy oraz uprawnienia. Musi też znajdować się w dowolnym jailroot, którego używasz (typowy błąd podczas używania postfiksu + mysql).

Nie musisz tego robić za pomocą gniazda TCP, tak długo, jak wiązać do portu> 1000

UNIX socket można uznać za nieco szybciej, gdyż nie posiada protokołu sieciowego, a tym samym przeskakuje stos sieci, ale jest ograniczony do jednego komputera. TCP w innych rękach pozwala łączyć się z usługami działającymi na różnych hostach.

+21

port> 1023 faktycznie – Thomas

6

Prawdziwa różnica polega na tym, że jeśli masz naprawdę wysoki współczynnik połączeń z krótkotrwałymi połączeniami, możesz zabraknąć portów, ponieważ używane porty kończą się na chwilę na TIME_WAIT z TCP. Nie tak z nazwanymi gniazdami.

Używam nazwanego gniazda dla połączeń lokalnych, jeśli wiem, że będzie on używany tylko przez hosta lokalnego. Ale do tego użytku .... tak, to naprawdę nie ma znaczenia. Niewystarczająca wydajność lub w inny sposób. Łatwo to zmienić później, jeśli zmienisz zdanie. Upewnij się, że firewall jest portem TCP, jeśli używasz tej opcji.

I znowu gniazdo TCP jest również gniazdem.

+0

Pomocne, dziękuję! –

Powiązane problemy