【发布时间】:2018-11-21 21:04:38
【问题描述】:
下面的 sn -p 打开一个 servlet,但每次都在不同的端口上。
#lang web-server/insta
(define (start req)
(response/xexpr
`(html (head (title "Hello world!"))
(body (p "Hey out there!")))))
documentation 解释了如何指定端口号(如果需要)。但我很好奇web-server/insta 如何在未指定 时决定在哪个端口上运行。我在 Github here 上找到了源代码,但我的球拍远不及标准,我无法确定我在那里阅读的内容。有人知道如何选择端口吗?
谢谢!
编辑: 刚刚了解了“临时端口”。
临时端口是在程序请求任何可用用户端口时由操作系统创建的短期端点。操作系统从预定义的范围内选择端口号,通常在 1024 和 65535 之间,并在相关 TCP 连接终止后释放端口。 - vmware 文档
因此,Racket 很可能只是请求任何可用端口,而 操作系统 返回一个“临时端口”。不过,如果有人能指出发生这种情况的 Racket 的 Web 服务器中的实际源代码,我想证实这一理论。
【问题讨论】:
-
附带说明:链接的源代码中的几行似乎表明默认情况下
web-server/insta尝试在端口 80 上打开(如果可用)。但即使在我停止 Apache 以释放端口 80 之后,web-server/insta仍然会抓取随机的、高编号的端口。非常好奇幕后是怎么回事,急切希望获得洞察力!