H2o: mruby 中缺少延迟(睡眠,Thread.sleep)?

创建于 2017-05-02  ·  6评论  ·  资料来源: h2o/h2o

我写了一个 mruby 处理程序,它使用 http_request 来保持我的缓存在 wordpress 中保持新鲜,但是因为我不知道有什么方法可以让处理程序休眠,而且它做了太多的请求,它使请求失败,因为 php 跟不上。

有什么方法可以使用 mruby 在 h2o 中休眠几秒钟(我尝试安装自定义线程 mruby 扩展,但我似乎无法从线程中获取响应日期)?

错误:
[lib/handler/fastcgi.c] in request:/index.php/tag/science:connection failed:failed to connect to host

代码:

if request_is_from_self and links_file_exist and req_is_get
    links = `php #{links_filepath}`

    for link in links.split(' ') do
        req = http_request(link)
        _, _, _ = req.join
    end
end
enhancement mruby

所有6条评论

嗨@taosx
我有点怀疑它真的跟不上 php。
您是否向自己的 h2o 实例发送 http 请求,然后运行 ​​fastcgi?

不确定您是否故意这样做是为了模拟暂停,但从我读到的内容来看,您是按顺序加入每个请求的。 这个想法是请求并行发出,所以你只有在所有请求都被触发后才开始加入。

你能试试

links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}

并发布更详细的错误描述?

此外,如果它总是相同的几个链接并且它们或多或少是静态的,您可以快速实现廉价的内存缓存。

我相信你的代码没有为 http_request 提供参数,我修改如下:
links.split(' ').map{|l| http_request(l) }.map{|r| r.join}
但它的性能似乎仍然比我上面发布的代码更差。
我通过将 opcache 安装和激活到 php 解决了该解决方案,现在完成所有请求所需的时间从 27 秒减少到 3.1 秒而没有错误。 通过使用您的代码将需要 4 秒。

在我做了一些更多的测试之后,我想用 h2o 为我的 wordpress 网站开源整个代码,它每 2 分钟缓存一次页面,在最大设置下使用 gzip 和 brottli 进行预压缩,并从缓存中提供。 到目前为止喜欢 h2o,感谢 h2o 的所有贡献者!!

将来我希望看到更多的 h2o 脚本功能,比如 openresty 但基于 h2o :D

@taosx啊对不起。 我忘记了关键部分: .to_a

links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}

只是出于好奇,你能再试一次吗? 你做了多少请求/链接数组有多大?

@yannick我又试了一次,我不得不修改 http_request 以给出它的参数 (l)。
当加热缓存时,速度下降到 3.06 秒:D,有时下降到 2.9+。
links 数组有 41 个元素(aws ec2 t2.micro)。

每次我添加另一个帖子时,我都会从帖子本身获得 1 个链接 + 来自添加的标签的 ~5 个链接......
我想我在不久的将来会遇到一个小问题。 我想我现在会放弃 mruby 并在未来采用不同的方法。

您认为我可以将 h2o 与 mruby 一起用作 wp 的反向代理缓存吗,我相信这是可能的。

看来您是通过 links = php #{links_filepath}向 php
对于 h2o,t2.micro 应该没问题,但是如果您还在该机器上运行 php 东西,它们会争夺单个 cpu,性能会进一步下降。 所以至少为了测试,我会使用 c4.large 或 c4.xlarge 之类的东西。

是的,应该可以通过 mruby 进行缓存,要么在内存中进行缓存,要么使用 redis(目前仍需要补丁,但应尽快合并,请参阅 https://github.com/h2o/h2o/pull/1152)

这是一个有趣的讨论!

除了应该如何解决问题(例如通过使用 mruby 实现缓存),我相信没有理由不应该在我们的 mruby 处理程序中提供睡眠功能。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Jxck picture Jxck  ·  7评论

utrenkner picture utrenkner  ·  7评论

dch picture dch  ·  5评论

basbebe picture basbebe  ·  3评论

Ys88 picture Ys88  ·  5评论