我正在尝试使用Gnip PowerTrack API,它要求我使用基本身份验证连接到JSON的HTTPS流.我觉得这应该是相当微不足道的,所以我希望一个比我更聪明的红宝石能指出我明显的错误.
这是我的ruby 1.9.3代码的相关部分:
require 'eventmachine'
require 'em-http'
require 'json'
usage = "#{$0} <user> <password>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
GNIP_STREAMING_URL = 'https://stream.gnip.com:443/foo/bar/prod.json'
http = EM::HttpRequest.new(GNIP_STREAMING_URL)
EventMachine.run do
s = http.get(:head => { 'Authorization' => [user, password], 'accept' => 'application/json', 'Accept-Encoding' => 'gzip,deflate' }, :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0)
buffer = ""
s.stream do |chunk|
buffer << chunk
while line = buffer.slice!(/.+\r?\n/)
puts JSON.parse(line)
end
end
end
Run Code Online (Sandbox Code Playgroud)
流连接(My …
我正在研究使用EventMachine驱动的twitter-stream rubygem来跟踪和捕获推文.我对整个编程事物都很陌生.如何判断我在事件循环中正在进行的处理是否会导致我落后?有一种简单的方法可以检查吗?
我对eventmachine很新,我无法在网上找到这个问题的答案.
现在我一直在使用em-mongo和eventmachine,而且我在文档和它们各自的对象之间写了一个穷人的映射器.我只想确认mongoid和mongomapper不能在事件机器环境中使用,因为它们是阻塞的,因此首先使用eventmachine失败了,而且我不会浪费时间编写这些映射器.:P
我正在使用Twitter流API运行EventMachine流程.如果流的内容不频繁,我总是有问题.
这是脚本的最小版本:
require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'json'
usage = "#{$0} <user> <password> <track>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
abort usage unless keywords= ARGV.shift
def startIt(user,password,keywords)
EventMachine.run do
http = EventMachine::HttpRequest.new("https://stream.twitter.com/1/statuses/filter.json",{:port=>443}).post(
:head =>{ 'Authorization' => [ user, password ] } ,
:body =>{"track"=>keywords},
:keepalive=>true,
:timeout=>-1)
buffer = ""
http.stream do |chunk|
buffer += chunk
while line = buffer.slice!(/.+\r?\n/)
if line.length>5
tweet=JSON.parse(line)
puts Time.new.to_s+"#{tweet['user']['screen_name']}: #{tweet['text']}"
end
end
end
http.errback {
puts Time.new.to_s+"Error: …Run Code Online (Sandbox Code Playgroud) 使用Sinatra Streaming,有一种方法可以指定哪些连接获取发送的信息。例如,只有特定帐户上的用户。
我相信可以使用Eventmachine Channels完成此操作,但我不知道如何做。任何建议,甚至更好的示例代码将不胜感激。
以下是代码的相关部分。现在,您可以看到它只是发送到每个打开的连接。
configure do
set server: 'thin', connections: []
set :app_file, __FILE__
set :port, ENV['PORT']
set :public_folder, File.dirname(__FILE__) + '/public'
end
get '/stream', provides: 'text/event-stream' do
stream :keep_open do |out|
settings.connections << out
out.callback { settings.connections.delete(out) }
end
end
post '/update/contact/:id' do
@contact = Contact.get(params[:id])
@contact.update(params[:contact])
settings.connections.each { |out| out << "data: #{@contact.account_id} Contact #{@contact.id} #{@contact.first_name} #{@contact.last_name}\n\n" }
204
end
Run Code Online (Sandbox Code Playgroud) 我有这样的Procfile:
web: bundle exec rails server -p $PORT
em: script/eventmachine
Run Code Online (Sandbox Code Playgroud)
该em过程使用start_server(端口ENV['PORT'])触发事件处理器,我的Web进程偶尔需要与之通信.
我的问题是Web进程如何知道与之通信的端口?如果我正确理解了heroku,它会在进程启动时为您分配一个随机端口(如果ps被终止或重新启动,它可以更改).谢谢!
我有一个rails应用程序需要从运行EventMachine的本地运行进程请求数据.实施此请求/响应的最佳方法是什么?
我有一个超级简单的脚本,它在Faye WebSocket GitHub页面上有很多用于处理封闭连接的脚本:
ws = Faye::WebSocket::Client.new(url, nil, :headers => headers)
ws.on :open do |event|
p [:open]
# send ping command
# send test command
#ws.send({command: 'test'}.to_json)
end
ws.on :message do |event|
# here is the entry point for data coming from the server.
p JSON.parse(event.data)
end
ws.on :close do |event|
# connection has been closed callback.
p [:close, event.code, event.reason]
ws = nil
end
Run Code Online (Sandbox Code Playgroud)
客户端空闲2小时后,服务器将关闭连接.一旦ws.on :close触发,我似乎无法找到重新连接到服务器的方法.有一个简单的方法来解决这个问题吗?我只是希望它在启动ws.on :open后触发:close.
在Windows 7 x86上为事件计算机安装带有Ruby的OpenSSL。
我想在Windows 7 x86 SP1上安装eventmachine gem。
我已经rubyinstaller-2.1.5.exe从http://rubyinstaller.org/downloads/
进行了安装DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe。
我运行命令:
gem install eventmachine --platform=ruby
Run Code Online (Sandbox Code Playgroud)
至于现在这是使用eventmachine-1.0.4。
我得到以下控制台输出:
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing eventmachine:
ERROR: Failed to build gem native extension.
C:/Ruby21/bin/ruby.exe extconf.rb
checking for main() in -lssl... no
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for inotify_init() …Run Code Online (Sandbox Code Playgroud) 我现在无法运行我的本地服务器3天了.重新启动计算机没有帮助.有几次,经过反复尝试大约40-50次,它随机工作 - 我无法弄清楚为什么.我尝试过一次不同的端口,但是从那时起,没有端口工作.每次我尝试运行我的rails服务器时都会得到这个.
/Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/eventmachine-1.0.5/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/eventmachine-1.0.5/lib/eventmachine.rb:526:in `start_server'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/thin-1.5.1/lib/thin/backends/tcp_server.rb:16:in `connect'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/thin-1.5.1/lib/thin/backends/base.rb:55:in `block in start'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/eventmachine-1.0.5/lib/eventmachine.rb:187:in `call'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/eventmachine-1.0.5/lib/eventmachine.rb:187:in `run_machine'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/eventmachine-1.0.5/lib/eventmachine.rb:187:in `run'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/thin-1.5.1/lib/thin/backends/base.rb:63:in `start'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/thin-1.5.1/lib/thin/server.rb:159:in `start'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/rack-1.6.1/lib/rack/handler/thin.rb:19:in `run'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/rack-1.6.1/lib/rack/server.rb:286:in `start'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/server.rb:80:in `start'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:80:in `block in server'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:75:in `tap'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:75:in `server'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/colmtuite/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Run Code Online (Sandbox Code Playgroud)
当我运行时,ps aux | grep …