Tag: thin

使用Thin和Sinatra异步迭代请求的响应

如果你在Sinatra中的响应返回一个’eachable’对象,那么Sinatra的事件循环将“每个”你的结果并以流式方式产生结果作为HTTP响应。 但是,如果有对Sinatra的并发请求,它将在处理另一个请求之前迭代一个响应的所有元素。 如果我们对某些数据库查询的结果有一个游标,那意味着我们必须等待所有数据在处理并发查询之前可用。 我看过async-sinatra的gem和http://macournoyer.com/blog/2009/06/04/pusher-and-async-with-thin/ ,认为这些可以解决我的问题,但我试过了出这个例子: require ‘sinatra/async’ class AsyncTest < Sinatra::Base register Sinatra::Async aget '/' do body "hello async" end aget '/delay/:n' do |n| EM.add_timer(n.to_i) { body { "delayed for #{n} seconds" } } end end 并且/delay/5请求并不像我期望的那样同时工作,即我同时发出3个请求,Chrome的调试器将响应时间记录为大约5,10和15秒。 我错过了一些设置还是有另一种方法告诉Sinatra / Thin以并发方式处理请求? 更新:这是另一个扳手(或可能清除):运行curl -i http://localhost:3000/delay/5同时具有正确的行为(每个请求在5秒内返回2个)。 运行ab -c 10 -n 50 http://locahost:3000/delay/5 (Apache基准实用程序)也会在总时间(~25秒)内返回合理的值。 Firefox表现出与Chrome相同的行为。 什么是与命令行实用程序不同的浏览器?

为什么简单的瘦服务器在基准测试时停止响应16500个请求?

可能重复: ‘ab’程序在收到大量请求后会冻结,为什么? 这是一个简单的测试服务器: require ‘rubygems’ require ‘rack’ require ‘thin’ class HelloWorld def call(env) [200, {“Content-Type” => “text/plain”}, “OK”] end end Rack::Handler::Thin.run HelloWorld.new, :Port => 9294 #I’ve tried with these added too, ‘rack.multithread’ => true, ‘rack.multiprocess’ => true 这是一个测试运行: $ ab -n 20000 http://0.0.0.0:9294/sdf This is ApacheBench, Version 2.3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, […]

RVM和瘦,root与本地用户

所以我试图通过RVM作为服务运行。 在thin install我在运行config命令时手动更新/etc/init.d/thin以使用su – user ,以便瘦作为本地用户而不是root用户运行。 到现在为止还挺好。 现在,当我尝试sudo service thin start ,看起来它正在尝试使用非RVM版本的Ruby(1.8.7开始时安装在盒子上)来实际执行命令。 我在非RVM版本上做了一个gem install thin ,然后我得到了一个uninitialized constant Bundler消息–Bundler只安装在RVMgem中,而不是系统gem。 看起来我无法设置RVM环境(即使我的RVM启动脚本在〜/ .bashrc中,然后包含在〜/ .bash_profile中)。 我想要做的就是使用RVM环境而不是系统环境作为服务运行。 这有可能吗? 我应该放弃并承诺以root身份运行一切的最终罪行吗? 这一点非常诱人。 谢谢你的帮助!