perl - Mojolicious 从一分钟到下一分钟突然停止工作
问题描述
几天前,我在本地机器上安装了 Mojolicious 包,因为我需要在生产服务器上的一个 Perl 程序中实现 websocket。它安装没有问题,我能够运行一个简单的测试脚本:
use strict;
use warnings;
use Mojo::UserAgent;
use Mojo::IOLoop;
# Open WebSocket
my $ua = Mojo::UserAgent->new;
$ua->insecure(1); # Otherwise the handshake will fail
$ua->websocket('wss://some.server.com' => sub {
my ($ua, $tx) = @_;
# Check if WebSocket handshake was successful
unless( $tx->is_websocket ) {
print "Handshake failed!\n";
return;
}
# Wait for WebSocket to be closed
$tx->on(finish => sub {
my ($tx, $code, $reason) = @_;
print "WebSocket closed with status $code.\n";
});
# Close WebSocket after receiving one message
$tx->on(message => sub {
my ($tx, $msg) = @_;
print "WebSocket message: $msg\n";
$tx->finish;
});
# Send a message to the server
print "Sending...\n";
$tx->send("Hi there!");
});
# Start event loop if necessary
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
print "Done!\n";
我正在一个服务器上测试它,它的证书有一个小问题,这就是我添加这一行的原因:
$ua->insecure(1); # Otherwise the handshake will fail
当我最终通过添加这一行让它工作时,我在我的生产服务器上安装了 Mojolicious,复制了上面的 perl 脚本,它在那里也运行得很好。
然后我回到本地机器上的脚本并再次运行它。令我惊讶的是,我现在收到一条错误消息:
无法通过 test009.pl 第 14 行第 2231 行的包“Mojo::UserAgent”找到对象方法“不安全”。
我重新安装了 Mojolicious 几次,但每次运行脚本时都会出现此错误。删除该行只会导致脚本什么都不做。它不会打印“握手失败”消息,也不会打印任何其他消息。甚至没有“完成!” 信息。
看起来它只是在websocket()
被调用后立即停止......
我现在很茫然。我完全不知道为什么它不再工作了。我的本地机器上的 Perl 环境没有任何改变......
这是我本地机器上的更多信息
- Windows 7 专业版 64 位 SP1
- ActivePerl 5.16.2
- 欢快的 6.64
任何人都可以提供一些关于发生了什么的提示吗?或者最好,如何让它再次工作?
解决方案
7.80 2018-05-20
许多用户期望 Mojo::UserAgent 默认验证所有 TLS 证书。不幸的是,到目前为止情况并非如此,但会随着这个版本的变化而改变,以加强安全性。默认情况下 Mojo::UserAgent 现在将拒绝所有无效的 TLS 证书。要返回之前的行为,您可以使用新
insecure
属性。$ua->insecure(1);
insecure
是 7.80 中的新功能。你的 Mojolicious 6.64 太旧了。
你说
我重新安装了 Mojolicious 几次,但每次运行脚本时都会出现此错误。
要么您没有安装最新版本,要么您的脚本仍然以某种方式获取旧版本(目录搜索顺序问题?)。
如果您想让您的代码在新旧版本之间保持兼容(且不安全),
$ua->insecure(1) if $ua->can('insecure');
应该管用。
推荐阅读
- bash - 检查 bash_profile 中是否有一行
- c - 如何在 PE 中隐藏导出表函数名称?
- sed - 零个或多个字符 * 和替换的正则表达式问题
- vb.net - vb.net DataGridView 防止用户点击列
- java - 如何从 Spring Cloud Data Flow 服务器获取特定的任务执行页面
- python - 支持 argparse 中子命令之前或之后的全局参数
- ios - 如何将我的 UInt8 数组转换为数据?(迅速)
- svg - 不支持 IE11 过滤器属性
- android - Android Studio 设计中多个视图之间的切换
- css - Wordpress 自动优化不清除缓存