- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 EventMachine 中建立 Redis 连接似乎有多种选择,我很难理解它们之间的核心区别。
我的目标是在 Goliath 内实现 Redis
我现在建立连接的方式是通过em-synchrony:
require 'em-synchrony'
require 'em-synchrony/em-redis'
config['redis'] = EventMachine::Synchrony::ConnectionPool.new(:size => 20) do
EventMachine::Protocols::Redis.connect(:host => 'localhost', :port => 6379)
end
上述方法与使用 em-hiredis 之类的方法有什么区别?
如果我将 Redis 用于集合和基本键:值存储,em-redis 是适合我的场景的最佳解决方案吗?
最佳答案
我们在 Goliath 内部非常成功地使用了 em-hiredis。以下是我们如何对发布进行编码的示例:
配置/example_api.rb
# These give us direct access to the redis connection from within the API
config['redisUri'] = 'redis://localhost:6379/0'
config['redisPub'] ||= EM::Hiredis.connect('')
example_api.rb
class ExampleApi < Goliath::API
use Goliath::Rack::Params # parse & merge query and body parameters
use Goliath::Rack::Formatters::JSON # JSON output formatter
use Goliath::Rack::Render # auto-negotiate response format
def response(env)
env.logger.debug "\n\n\nENV: #{env['PATH_INFO']}"
env.logger.debug "REQUEST: Received"
env.logger.debug "POST Action received: #{env.params} "
#processing of requests from browser goes here
resp =
case env.params["action"]
when 'SOME_ACTION' then process_action(env)
when 'ANOTHER_ACTION' then process_another_action(env)
else
# skip
end
env.logger.debug "REQUEST: About to respond with: #{resp}"
[200, {'Content-Type' => 'application/json', 'Access-Control-Allow-Origin' => "*"}, resp]
end
# process an action
def process_action(env)
# extract message data
data = Hash.new
data["user_id"], data["object_id"] = env.params['user_id'], env.params['object_id']
publishData = { "action" => 'SOME_ACTION_RECEIVED',
"data" => data }
redisPub.publish("Channel_1", Yajl::Encoder.encode(publishData))
end
end
return data
end
# process anothr action
def process_another_action(env)
# extract message data
data = Hash.new
data["user_id"], data["widget_id"] = env.params['user_id'], env.params['widget_id']
publishData = { "action" => 'SOME_OTHER_ACTION_RECEIVED',
"data" => data }
redisPub.publish("Channel_1", Yajl::Encoder.encode(publishData))
end
end
return data
end
end
处理订阅留给读者作为练习。
关于ruby - 建议在 Goliath 中使用的 Redis 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088314/
假设我有一个 I/O 受限的操作。我确实有回调(或 em 同步) EM 如何切换到处理下一个请求保持前一个等待回调? 它如何使 Thread.current 变量保持隔离? 如何模拟长时间运行的作业?
我正在尝试像下面这样测试 Goliath + Grape 应用程序: require 'em-synchrony/em-mongo' require 'yajl/json_gem' require '
我已经按照说明用 goliath 配置了 New Relic here 我正在使用 gem 'newrelic_rpm',但无法获取 newrelic 服务的统计信息。 最佳答案 我们必须在应用的开头
我需要一个简单的网络服务器来解析它接收到的 url,调用一些其他的 ruby 脚本来做一些繁重的处理,然后返回结果 JSON。 歌利亚适合这个吗?据我所知,请求是按顺序处理的。我应该怎么做才能做到
我有一个项目需要解析数十万个 HTML 和 XML 文档。 我认为这将是学习 Ruby fibers 和新的 Goliath 框架的绝佳机会。 但很明显,如果您使用阻塞库,Goliath 就会失败。但
在 EventMachine 中建立 Redis 连接似乎有多种选择,我很难理解它们之间的核心区别。 我的目标是在 Goliath 内实现 Redis 我现在建立连接的方式是通过em-synchron
所以我正在尝试设置 em-websocket (或者可能是 Goliath ),以便用户可以选择不同的路线,从而只订阅该 channel ,例如: example.com/channel_1 在那里打
我正在尝试使用 Goliath 框架创建异步 API。服务应该写入 mysql,将消息添加到 RabbitMQ 并接收返回的响应。还应该有一个用 Rails 构建的单独的管理应用程序。我对此有几个问题
也许这是错误的方法,但我是 trying to parallelize em-hiredis使用 EM::Synchrony::Multi 或 EM::Synchrony::FiberIterator
我在使用 RSpec 测试 Goliath API 时遇到了奇怪的行为。我的一项测试如下所示: require 'helper' describe Scales::Dispatch do it "
我是一名优秀的程序员,十分优秀!