拥有任何基于 PSGI 的应用程序,例如以下app.psgi
代码段
use 5.016;
use warnings;
use Data::Dumper;
#WHAT TO DO HERE to get the $port?
my $port = $ENV{SERVER_PORT} // "undefined";
print STDERR "my port is: $port\n"; #says "undefined"
my $app = sub {
my $env = shift;
printf STDERR "Port from the app is: $env->{SERVER_PORT}\n";
return [
200,
['Content-Type' => 'text/plain'],
[ "hello world!"],
];
};
$app;
如何发现有关运行服务器的一些信息?例如,当运行app.psgi
为:
plackup -p 6000
将设置并打印$port
- 6000。
在里面$app
很容易,因为我可以访问$env
. 但我想在调用$port
之前$app
得到,例如上面的例子在每个请求时打印端口 - 但我想在开始运行$port
之前得到一次。$app
编辑
是的,我必须知道例如服务器可以侦听更多端口,并且在请求到达某些端口时定义了确切的端口。
我想获得监听端口。
但是根据评论和回答,这里可能没有针对不同服务器实现(Starman、Twiggy)的任何统一 API 来获取监听端口。
问题背后的真正原因是我想向 Bonjour (Zeroconf) 宣传这些应用程序。(我还不知道如何(还),但有必要知道应用程序正在侦听哪个端口。)
现在我也意识到,将命令本身包装到一些代码中会更容易plackup
,例如runserver.pl
- 并且会知道我将用来运行plackup
命令的端口。;)