问题标签 [psgi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 是否有可用的 Perl PSGI/Plack 服务器只讲 PSGI 而不是 HTTP?
在我看来,过去和现在的常规部署如下所示:
事实上,我在 Internet 和实际的 Web 应用程序之间确实有两个成熟的 Web 服务器。
由于 nginx 直接内置了 uWSGI 并且 uWSGI 支持 PSGI 协议,它是 WSGI 的一个分支,我喜欢使用 PSGI 代理(只有 PSGI 没有 HTTP)而不是完整的 Web 服务器(Starman)。
是否有 PSGI-only-broker 解决方案可用?
perl - 为什么带有 uwsgi_psgi 的 Perlbrew PSGI 应用程序会导致“错误”的 Perl 包含路径?
我想通过使用 uWSGI 网关接口来部署基于 PSGI 的 Web 应用程序。
为了做到这一点,我在我的 Debian 服务器上本地安装了 Perlbrew,没有可用的 root 访问权限。
然后我使用cpanm -V
Perl 环境进行了检查:
一切看起来都不错,所以我安装Dancer2
了选择的 Web 框架并成功启动了一个框架测试应用程序:
Plack 内部的 HTTP Web 服务器已启动并准备好为应用程序提供服务。
再说一次,到目前为止一切都很好。但我想使用 uWSGI,而不是在服务链中拥有另一个成熟的 Web 服务器。
所以我安装了uwsgi-plugin-psgi
它自动附带的uwsgi-core
:
现在我想启动uWSGI网关接口......:
...并且应用程序崩溃了:
我看到的第一件事是建筑。虽然其他(cpnam
和plackup
)程序使用“x86_64-linux”架构,但只有 uWSGI 使用“x86_64-linux-gnu-thread-multi”。
Perl 的“x86_64-linux-gnu-thread-multi”架构文件夹可用,但不包含任何模块。大多数模块都安装在“根库路径”和“x86_64-linux”架构文件夹中。
uwsgi_psgi
我试图通过使用命令行开关来解决这个问题,--perl-local-lib
但没有运气:
我也弄乱了不同的 uWSGI 操作模式(单进程、prefork、线程),但也没有运气。
为什么 uWSGI 修改包含路径,我如何启动 uWSGI 使其与其他程序一样工作,或者另外安装该架构的模块?
perl - 将自定义环境变量设置为 psgi hash plack
当我向 dumper $env 发出请求时,我得到了环境哈希 psgi 的所有数据,在这个例子中
或更直接地
输出:
返回客户端的 IP 地址
如何将我自己的自定义环境变量设置为 psgi hash plack?
为什么我要这样做,我的情况与: Nginx 变量类似于 Apache 中的 SetEnv?
如果不能这样做,我可以创建子类并将该功能添加到 psgi Web 服务器吗?
谢谢你的时间
perl - 在 perl plack 中调用子程序不返回任何内容
我是 perl plack/psgi 的新手。我想在 perl plack/psgi 循环中访问一个子例程,但看起来如果子例程没有被执行。每个像 $number 这样的父变量都应该像编写常规 perl 脚本一样自动传递。我在这里想念什么吗,这可能吗?
返回 10 而不是 20 :(
perl - 与 PSGI/Dancer 堆栈相关的 Nginx 单元
根据Nginx 的说法,它超越了它的服务器根并启动了它的应用程序平台
..Unit 是一个现代应用服务器,用于用 PHP、Python 和 Go 编写的应用程序(支持 node.js、Java、Ruby Perl 和其他即将推出的),在动态环境中运行。
Unit 在哪里适合 ngnix->PSGI->Starman->Dancer 堆栈?它取代或增加了哪个部分?
perl - 在进程之间共享和修改 PSGI 中的变量
我们有一个使用多进程和多线程的 UWSGI 的 PSGI 脚本,寻找一种快速的解决方案来在这些处理的线程和线程之间共享可编辑的哈希。我使用 Cache::Memcached::Fast 和 Redis 等内存存储进行了测试。
与仅使用语言环境哈希相比,有快但不够快
在我们的测试中,速度提高了 10 倍。有没有办法在运行时共享和编辑变量——比如有一种本地散列场景——例如进程 1 正在更新
并且进程 2 也具有 $hash{$id} 的新值?
我还尝试了 IPC::Shareable、MCE::Shared::Minidb 或 threads::shared (threads::shared: 段内存限制),它们确实适用于 PSGI。
有没有办法在同一台机器上的所有进程之间共享 FAST - 可编辑 - 局部变量?
perl - PSGI 脚本中的“Cronjob”
我有一个使用 plack 构建器的 PSGI 脚本,该脚本通过生成多个进程使用 uwgsi 执行。我必须使用数据库调用每分钟刷新一次内部哈希。是否有可能独立于外部进程/工作人员执行,在每个给定的时间间隔执行一些代码行?
perl - Perl 的 PSGI/Plack 和流式响应内容
我正在探索 PSGI/Plack 以及如何进行流式处理/延迟响应。已经用谷歌搜索了,但几乎没有找到如何做到这一点的例子。以下是我从 metacpan 上的 PSGI::FAQ 中收集到的一些点点滴滴。例如,如果我想在下面对我长时间运行的模拟LongProcess() 方法进行流式响应,我将如何使用 PSGI/Plack 来实现它?此外,如果可能,请分享任何与此主题相关的示例链接。谢谢!
perl - FastCGI、Perl 和退出
在过去的几周里,我一直在磨练我在项目中使用的大型、几十年前的代码库的性能,这里有人建议我应该看看 FastCGI 或 HTTP::Engine 之类的东西。我发现使用 FastCGI 非常简单,但是有一个令人烦恼的问题,我发现答案不一。
我读过的一些文档说你永远不应该调用exit
通过 FastCGI 运行的脚本,因为这会损害保持它持久加载的整个概念。其他人说没关系。我的代码在很多地方都使用了 exit,确保没有任何东西继续执行很重要。例如,我有调用授权检查的受限访问组件:
为了尽可能避免代码中出现错误,允许某人在不应该访问这些功能的情况下访问这些功能,在使用checkCredentials
登录页面生成用户友好的响应后,使用 exit() 结束进程,如果答案是用户没有适当的凭据。例如:
}
我已经使用了它,这样我就不会意外地忽略导致安全漏洞的继续发生的事情。目前,调用例程可以安全地假设它只有在提供正确的凭据时才能获得控制checkCredentials
权。
但是,我想知道是否需要删除这些调用以充分利用 FastCGI。FCGI $req->Finish()
(或用于 HTTP::Engine 的 PSGI 中的等价物)是否足以替代?
perl - 如何知道 PSGI 非阻塞流式编写器何时以 PSGI 兼容的方式准备好接收更多数据?
我正在编写一个 PSGI 中间件,目前在 Twiggy 服务器上运行。中间件处理大型 (>2GB) 动态创建的文件并利用 Twiggy/AnyEvent 的异步流传输能力。
PSGI规范非常简要地说明了流式响应:
...响应者必须返回另一个实现
write
和close
方法的对象。...
挖掘 Twiggy 代码,它用于AnyEvent::Handle::push_write
实现上述write
方法。如果您继续向其提供大量数据的速度比将其写入网络的速度要快,这将耗尽您的所有 RAM。
当然AnyEvent::Handle
有方法并利用回调来处理缓冲区大小(即on_drain
事件处理程序来指示写入缓冲区何时为空并wbuf_max
限制写入缓冲区大小)。
然而,使用这些特性将是非常特定于服务器的,并且会限制 PSGI 应用程序的可移植性。PSGI 规范似乎没有涵盖用于控制/监视异步写入流或访问底层文件句柄/描述符以进行手动检查的 API。
其他人如何解决内存使用/缓冲问题或知道异步写入何时以跨 PSGI Web 服务器“兼容”的方式完成?任何指针都会很棒。