2009-07-29 11 views
18

Estaba configurando Django en Cherokee hoy (usando SCGI), y noté que the Django docs dice que puede usar una combinación de host/puerto o un socket para la comunicación entre el servidor web y Django.FastCGI en el puerto

Lo único que tienen que decir al respecto es

Lo que usted elija es una manera de preferencia; un socket TCP es generalmente más fácil debido a problemas de permisos.

(A propósito, he tenido problemas de permisos al hacer esto con un socket, pero no con un host :).)

Recuerdo vagamente cómo funcionan los enchufes de mi clase de programación de sistemas, pero tengo mucha curiosidad sobre cuál es la diferencia efectiva entre los dos. Cada vez que hay una opción de algo, hay alguien con una opinión al respecto, así que esperaba obtener eso. En particular, ¿hay alguna diferencia de rendimiento?

O, si realmente no importa en absoluto, solo me gustaría obtener una confirmación, así que puedo continuar con mi programación e ignorar esta cosa de administrador de sistemas.

+0

Tanto un socket TCP como un socket con nombre Unix serán sockets. ¿Con cuál tuvo problemas? – Thomas

+0

Fue hace un tiempo, pero parece recordar tener que apuntar un lighttpd a un archivo .sock en mi sistema de archivos, que es un socket con nombre, ¿verdad? Uf, necesito leer más sobre esto. –

Respuesta

36

Un socket UNIX se administra como un archivo en el sistema de archivos. Debe establecer los valores y permisos de usuario/grupo correctamente. También tiene que estar en cualquier jailroot que esté utilizando (un error común cuando se usa postfix + mysql).

No es necesario hacer eso por un socket TCP, el tiempo que se enlaza a un puerto> 1000.

Un socket UNIX se puede considerar un poco más rápido, ya que no tiene un protocolo de red y por lo tanto se salta la pila de red, pero está limitada a una sola máquina. TCP en las otras manos le permite conectarse a servicios que se ejecutan en diferentes hosts.

+21

puerto> 1023 en realidad – Thomas

6

La verdadera diferencia, creo, es que si tiene una tasa de conexión muy alta con conexiones efímeras puede quedarse sin puertos porque los puertos usados ​​terminan en el estado TIME_WAIT por un tiempo con TCP. No es así con los enchufes con nombre.

Utilizaría un conector con nombre para conexiones locales si sé que solo lo utilizará el servidor local. Pero para este uso ... sí, realmente no importará. No rendimiento sabio o de lo contrario. Es fácil cambiar más adelante si cambia de opinión. Solo asegúrese de proteger el puerto TCP si usa esa opción.

Y de nuevo, un zócalo TCP también es un zócalo.

+0

Útil, ¡gracias! –