Mojo::Server::Daemon-无阻塞I/O HTTP和WebSocket服务器
使用Mojo::Server::Daemon;my$daemon=Mojo::Server::daemon->new(listen=>['http://*:8080']);$daemon->unsubscribe('request')->on(request=>sub($daemon,$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->简历;});$daemon->运行;
Mojo::服务器::守护程序是一个功能齐全、高度可移植的非阻塞I/O HTTP和WebSocket服务器,具有IPv6、TLS、SNI、Comet(长轮询)、keep-alive和多事件循环支持。
为了获得更好的可伸缩性(epoll、kqueue)并提供非阻塞名称解析、SOCKS5以及TLS支持,可选模块电动汽车(4.32+),网络::DNS::本机(0.15+),IO::插槽::插槽(0.64+)和IO::套接字::SSL如果可能,将自动使用(2.009+)。也可以使用禁用单个功能MOJO_NO_NNR公司
,MOJO_NO袜子
和MOJO_NO_TLS公司
环境变量。
请参见Mojolicious::Guides::Cookbook中的“部署”获取更多信息。
这个Mojo::服务器::守护程序可以使用以下信号在运行时控制该过程。
立即关闭服务器。
Mojo::服务器::守护程序从继承所有事件Mojo::服务器.
Mojo::服务器::守护程序继承所有属性Mojo::服务器并实现了以下新功能。
my$acceptors=$daemon->acceptors;$daemon=$daemon->acceptors(['6be0c140ef00a389c5d039536b56d139']);
活动受体ID。
#检查端口mu$port=$daemon->ioloop->receptor($daemon->acceptor->[0])->port;
my$backlog=$daemon->backlog;$daemon=$daemon->backlog(128);
侦听待办事项列表大小,默认为SOMAXCONN公司
.
my$timeout=$daemon->不活动超时;$daemon=$daemon->activity_timeout(5);
与活动请求的连接在关闭之前可以处于非活动状态的最长时间(秒),默认为MOJO_INACTIVITY超时
环境变量或30
。将值设置为0
将允许连接无限期处于非活动状态。
my$loop=$daemon->ioloop;$daemon=$daemon->ioloop(Mojo::ioloop->new);
用于I/O操作的事件循环对象,默认为全局Mojo::IOLoop单身。
我的$timeout=$daemon->keep_alive_timeout;$daemon=$daemon->keep_alive_timeout(10);
没有活动请求的连接在关闭之前可以处于非活动状态的最长时间(秒),默认为MOJO_保持激活_TIMEOUT
环境变量或5
。将值设置为0
将允许连接无限期处于非活动状态。
my$listen=$daemon->listen;$daemon=$daemon->监听(['https://127.0.0.1:8080']);
具有一个或多个要侦听的位置的数组引用,默认为MOJO_LISTEN公司
环境变量或http://*:3000
(的快捷方式http://0.0.0.0:3000
).
#侦听所有IPv4接口$daemon->listen(['http://*:3000']);#侦听所有IPv4和IPv6接口$daemon->listen(['http://[::]:3000']);#侦听IPv6接口$daemon->listen(['http://[::1]:4000']);#侦听IPv4和IPv6接口$daemon->监听(['http://127.0.0.1:3000','http://[::1]:3000']);#监听UNIX域套接字“/tmp/myapp.sock”(百分比编码斜杠)$daemon->listen(['http+unix://%2Ftmp%2Fmyapp.sock']);#文件描述符,由systemd使用$daemon->监听(['http://127.0.0.1?fd=3']);#允许多台服务器使用同一端口(SO_REUSEPORT)$daemon->listen(['http://*:8080?重用=1']);#同时使用HTTP和HTTPS侦听两个端口$daemon->listen(['http://*:3000','https://*:4000']);#使用自定义证书和密钥$daemon->listen(['https://*:3000?cert=/x/server.crt&key=/y/server.key']);#特定于域的证书和密钥(SNI)$daemon->监听([“https://*:3000?example.com_cert=/x/my.crt&example.com密钥=/y/my.key”]);#甚至是自定义证书颁发机构$daemon->监听(['https://*:3000?cert=/x/server.crt&key=/y/server.key&ca=/z/ca.crt');
这些参数当前可用:
- 加利福尼亚州
-
ca=/etc/tls/ca.crt
用于验证对等证书的TLS证书颁发机构文件的路径。
- 证书
-
cert=/etc/tls/server.crtmojolicious.org_cert=/etc/tls/mojo.crt
TLS证书文件的路径,默认为内置测试证书。
- 密码
-
密码=AES128-GCM-SHA256:RC4:高:!MD5:!空:!EDH公司
TLS密码规范字符串。有关格式的更多信息,请参阅https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-字符串.
- fd公司
-
fd=3
已准备好侦听套接字的文件描述符。
- 钥匙
-
key=/etc/tls/server.keymojolicious.org_key=/etc/tls/mojo.key
TLS密钥文件的路径,默认为内置测试密钥。
- 重复使用
-
重用=1
允许多台服务器使用同一端口SO_REUSEPORT公司
插座选项。
- 单一验收
-
single_accept=1
一次只接受一个连接。
- 验证
-
验证=0x00
TLS验证模式。
- 版本
-
版本=TLSv1_2
TLS协议版本。
my$max=$daemon->max_clients;$daemon=$daemon->max_clients(100);
在停止接受新的传入连接之前,允许此服务器并发处理的最大接受连接数传递给Mojo::IOLoop中的“max_connections”.
我的$max=$daemon->max_requests;$daemon=$daemon->max_requests(250);
每个连接的最大keep-alive请求数,默认为100
.
my$bool=$daemon->silent;$daemon=$daemon->silent($bool);
禁用控制台消息。
Mojo::服务器::守护程序从继承所有方法Mojo::服务器并实现了以下新功能。
my$ports=$daemon->ports;
获取此服务器当前正在侦听的所有端口。
#所有端口比如@{$daemon->ports};
$daemon->运行;
运行服务器并等待“信号”.
$daemon=$daemon->start;
通过启动或恢复接受连接“ioloop”.
#在随机端口上侦听my$port=$daemon->监听(['http://127.0.0.1'])->开始->端口->[0];#同时运行多个web服务器my$daemon1=Mojo::Server::Daemon->new(listen=>['http://*:3000'])->启动;my$daemon2=Mojo::Server::Daemon->new(listen=>['http://*:4000'])->启动;除非Mojo::IOLoop->is_running,否则Mojo::IOLoop->启动;
$daemon=$daemon->stop;
停止通过接受连接“ioloop”.
您可以设置MOJO_SERVER_DEBUG公司
将一些高级诊断信息打印到的环境变量STDERR公司
.
MOJO_SERVER_DEBUG=1
莫乔利奇,Mojolicious::指南,https://mojolicious.org.