diff options
author | Eric Wong <e@80x24.org> | 2016-04-25 05:12:43 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-04-25 05:26:37 +0000 |
commit | 85c83085eeb14be7e7b9a395fa9408241ecb8244 (patch) | |
tree | 7d80b6731a157d0f016919ffdaa86c5f2d1f08a6 /lib/PublicInbox/HTTPD.pm | |
parent | 837323706d89660923ac2aed21f07f12ad80be72 (diff) | |
download | public-inbox-85c83085eeb14be7e7b9a395fa9408241ecb8244.tar.gz |
Hopefully this modularizes things a little and allows us to work on a combined super server to save RAM.
Diffstat (limited to 'lib/PublicInbox/HTTPD.pm')
-rw-r--r-- | lib/PublicInbox/HTTPD.pm | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/PublicInbox/HTTPD.pm b/lib/PublicInbox/HTTPD.pm new file mode 100644 index 00000000..78efaa50 --- /dev/null +++ b/lib/PublicInbox/HTTPD.pm @@ -0,0 +1,46 @@ +# Copyright (C) 2016 all contributors <meta@public-inbox.org> +# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> + +package PublicInbox::HTTPD; +use strict; +use warnings; +use Plack::Util; +require PublicInbox::HTTPD::Async; +require PublicInbox::Daemon; + +sub pi_httpd_async { + my ($io, $cb) = @_; + PublicInbox::HTTPD::Async->new($io, $cb); +} + +sub new { + my ($class, $sock, $app) = @_; + my $n = getsockname($sock) or die "not a socket: $sock $!\n"; + my ($host, $port) = PublicInbox::Daemon::host_with_port($n); + + my %env = ( + SERVER_NAME => $host, + SERVER_PORT => $port, + SCRIPT_NAME => '', + 'psgi.version' => [ 1, 1 ], + 'psgi.errors' => \*STDERR, + 'psgi.url_scheme' => 'http', + 'psgi.nonblocking' => Plack::Util::TRUE, + 'psgi.streaming' => Plack::Util::TRUE, + 'psgi.run_once' => Plack::Util::FALSE, + 'psgi.multithread' => Plack::Util::FALSE, + 'psgi.multiprocess' => Plack::Util::TRUE, + 'psgix.harakiri'=> Plack::Util::FALSE, + 'psgix.input.buffered' => Plack::Util::TRUE, + 'pi-httpd.async' => do { + no warnings 'once'; + *pi_httpd_async + }, + ); + bless { + app => $app, + env => \%env + }, $class; +} + +1; |