名称

Mojo::Server::Prefork-预启动非阻塞I/O HTTP和WebSocket服务器

简介

使用Mojo::Server::Prefork;my$prefork=Mojo::Server::prefork->new(listen=>['http://*:8080']);$prefork->unsubscribe(“请求”)->on(请求=>sub($prefork,$tx){#请求我的$method=$tx->req->方法;我的$path=$tx->req->url->path;#响应$tx->res->code(200);$tx->res->headers->content_type('text/plain');$tx->res->body(“$path!的$method请求”);#恢复交易记录$tx->简历;});$prefork->run;

描述

Mojo::服务器::预制是一个功能齐全、经过UNIX优化、预分叉的非阻塞I/O HTTP和WebSocket服务器,构建在经过良好测试且可靠的基础上Mojo::服务器::守护进程,支持IPv6、TLS、SNI、UNIX域套接字、Comet(长轮询)、keep-alive和多事件循环。请注意,服务器使用信号进行流程管理,因此应避免在应用程序中修改信号处理程序。

为了获得更好的可伸缩性(epoll、kqueue)并提供非阻塞名称解析、SOCKS5以及TLS支持,可选模块电动汽车(4.32+),网络::DNS::本机(0.15+),IO::插槽::插槽(0.64+)和IO::套接字::SSL(1.84+)将在可能的情况下自动使用。也可以使用禁用单个功能MOJO_NO_NNR公司,MOJO_NO_SOCKS运动鞋MOJO_NO_TLS公司环境变量。

请参见Mojolicious::Guides::Cookbook中的“部署”了解更多信息。

经理信号

这个Mojo::服务器::Prefork可以使用以下信号在运行时控制管理器进程。

国际贸易术语

立即关闭服务器。

退出

正常关闭服务器。

TTIN公司

将工作人员池增加一个。

TTOU公司

将工作人员池减少一个。

工人信号

Mojo::服务器::Prefork可以使用以下信号在运行时控制工作进程。

退出

优雅地停下工人。

活动

Mojo::服务器::预制从继承所有事件Mojo::服务器::守护进程并且可以发射出以下新的气体。

完成

$prefork->on(finish=>sub($prefork,$gracey){…});

服务器关闭时发出。

$prefork->on(finish=>sub($prefork,$gramme){说$优雅?”正常关闭服务器':'服务器关闭';});

心跳

$prefork->on(heartbeat=>sub($prefork,$pid){…});

当从工作机接收到心跳消息时发出。

$prefork->on(heartbeat=>sub($prefork,$pid){说“Worker$pid有心跳”});

收获

$prefork->on(收获=>sub($prefork,$pid){…});

子进程退出时发出。

$prefork->on(reac=>sub($prefork,$pid){say“Worker$pid stopped”});

产卵

$prefork->on(派生=>sub($prefork,$pid){…});

派生工作进程时发出。

$prefork->on(spawn=>sub($prefork,$pid){说“Worker$pid started”});

等待

$prefork->on(wait=>sub($prefork){…});

当管理器开始等待新的心跳消息时发出。

$prefork->打开(等待=>sub($prefork){我的$workers=$prefork->workers;说“等待$workers员工的心跳信息”;});

属性

Mojo::服务器::Prefork继承所有属性Mojo::服务器::守护进程并实现了以下新功能。

接受

我的$accepts=$prefork->accepts;$prefork=$prefork->接受(100);

允许工作线程接受的最大连接数,然后正常停止,然后被新启动的工作线程替换,并传递给Mojo::IOLoop中的“max_accepts”,默认为10000。将值设置为0将允许工人无限期地接受新的连接。请注意,可以随机减去此值的一半,以改进负载平衡,并确保不是所有工作线程都同时重新启动。

清理

我的$bool=$prefork->cleanup;$prefork=$prefork->清理($bool);

删除“pid文件”一旦不再需要,则自动默认为真值。

正常超时

我的$timeout=$prefork->gratful_timeout;$prefork=$prefork->gratful_timeout(15);

强制之前正常停止工作人员可能需要的最长时间(秒),默认为120。请注意,此值通常应略大于任何一个请求所需的最大时间。

心跳间隔

我的$interval=$prefork->heartbeat_interval;$prefork=$prefork->heartbeat_interval(3);

心跳间隔(秒),默认为5.

心跳超时

我的$timeout=$prefork->heartbeat_timeout;$prefork=$prefork->heartbeat_timeout(2);

无心跳的工作线程正常停止之前的最长时间(秒),默认为50。请注意,此值通常应略大于预期任何一个操作阻塞事件循环的最大时间。

pid文件

我的$文件=$prefork->pid_file;$prefork=$prefork->pid_file(“/tmp/prefork.pid”);

进程id文件的完整路径,默认为工作前.pid在临时目录中。

备用的

我的$spare=$prefork->spare;$prefork=$prefork->备用(4);

如果有需要,临时产生多达此数量的额外工人,默认为2。这允许在旧员工仍在正常关闭的情况下启动新员工,大大降低了员工重启的性能成本。

工人

我的$workers=$prefork->workers;$prefork=$prefork->工人(10);

工作进程数,默认为4。一个很好的经验法则是,对于执行大部分非阻塞操作的应用程序,每个CPU核心有两个工作进程,阻塞操作通常需要更多的工作进程,并从减少并发性中受益Mojo::Server::Daemon中的“max_clients”(通常低至1).

方法

Mojo::服务器::Prefork从继承所有方法Mojo::服务器::守护进程并实现了以下新功能。

检查ID

我的$pid=$prefork->check_pid;

从获取运行服务器的进程id“pid文件”如果服务器未运行,则将其删除。

除非$prefork->check_pid;

确保pid_file

$prefork->ensure_pid_file($pid);

确保“pid文件”存在。

健康的

我的$health=$prefork->健康;

具有心跳的当前活动工作进程数。

运行

$prefork->运行;

运行服务器并等待“经理信号”.

另请参阅

Mojolicious公司,Mojolicious::指南,https://mojolicious.org.