20

我今天在 Cherokee 上设置 Django(使用 SCGI),我注意到Django 文档说您可以使用主机/端口组合或套接字在网络服务器和 Django 之间进行通信。

他们在这件事上唯一要说的就是

你选择的是一种偏好方式;由于权限问题,TCP 套接字通常更容易。

(顺便说一句,我在使用套接字时遇到了权限问题,但在使用主机时却没有:)。)

我隐约记得我的系统编程课上的套接字是如何工作的,但我真的很好奇两者之间的有效区别是什么。任何时候有选择的东西,都会有人对这件事有意见,所以我希望能得到那个。特别是,是否有任何性能差异?

或者,如果它真的无关紧要,我只是想要一些确认,所以我可以继续我的编程并忽略这些系统管理员的东西。

4

2 回答 2

40

UNIX 套接字作为文件系统中的文件进行管理。您需要正确设置用户/组值和权限。它还必须在您正在使用的任何越狱中(使用 postfix + mysql 时的常见错误)。

只要绑定到大于 1000 的端口,就不需要对 TCP 套接字执行此操作。

可以认为 UNIX 套接字稍微快一些,因为它没有网络协议,因此会跳过网络堆栈,但仅限于单台机器。另一方面,TCP 允许您连接到在不同主机上运行的服务。

于 2009-07-29T21:03:46.610 回答
7

我认为真正的区别是,如果你有一个非常高的连接率和短期连接,你可能会用完端口,因为使用 TCP 的端口最终会处于 TIME_WAIT 状态一段时间。命名套接字并非如此。

如果我知道它只会被本地主机使用,我会使用命名套接字进行本地连接。但是对于这种用途....是的,这并不重要。不是性能明智或其他。如果您改变主意,以后很容易改变。如果您使用该选项,请确保为 TCP 端口设置防火墙。

再说一次,TCP 套接字也是一个套接字。

于 2009-07-29T21:13:49.097 回答