标签: eventmachine

具有基本身份验证和gzip挂起的em-http流

我正在尝试使用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 …

ruby basic-authentication eventmachine http-streaming gnip

6
推荐指数
1
解决办法
873
查看次数

EventMachine - 你怎么知道你是否落后?

我正在研究使用EventMachine驱动的twitter-stream ruby​​gem来跟踪和捕获推文.我对整个编程事物都很陌生.如何判断我在事件循环中正在进行的处理是否会导致我落后?有一种简单的方法可以检查吗?

ruby twitter eventmachine

5
推荐指数
2
解决办法
450
查看次数

使用eventmachine的mongoid和mongomapper

我对eventmachine很新,我无法在网上找到这个问题的答案.

现在我一直在使用em-mongo和eventmachine,而且我在文档和它们各自的对象之间写了一个穷人的映射器.我只想确认mongoid和mongomapper不能在事件机器环境中使用,因为它们是阻塞的,因此首先使用eventmachine失败了,而且我不会浪费时间编写这些映射器.:P

ruby mongodb eventmachine

5
推荐指数
1
解决办法
1787
查看次数

EventMachine和Twitter流媒体API

我正在使用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)

ruby twitter eventmachine http-streaming

5
推荐指数
1
解决办法
1051
查看次数

Sinatra流和Eventmachine频道

使用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)

ruby sinatra eventmachine

5
推荐指数
1
解决办法
579
查看次数

在heroku上的两个进程之间进行通信(使用哪个端口)

我有这样的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被终止或重新启动,它可以更改).谢谢!

port process heroku eventmachine

5
推荐指数
2
解决办法
3403
查看次数

Rails和Ruby EventMachine进程之间的通信

我有一个rails应用程序需要从运行EventMachine的本地运行进程请求数据.实施此请求/响应的最佳方法是什么?

ruby ruby-on-rails unix-socket eventmachine ruby-on-rails-3

5
推荐指数
1
解决办法
769
查看次数

Faye WebSocket,在关闭处理程序被触发后重新连接到套接字

我有一个超级简单的脚本,它在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.

ruby eventmachine websocket faye

5
推荐指数
1
解决办法
2183
查看次数

在Windows 7 x86上为事件计算机安装Ruby的OpenSSL

在Windows 7 x86上为事件计算机安装带有Ruby的OpenSSL。
我想在Windows 7 x86 SP1上安装eventmachine gem。
我已经rubyinstaller-2.1.5.exehttp://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)

ruby openssl windows-7 eventmachine ruby-development-kit

5
推荐指数
1
解决办法
2747
查看次数

Eventmachine start_tcp_server没有接受者 - 端口正在使用或需要root权限(RuntimeError)

我现在无法运行我的本地服务器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 …

git ruby-on-rails localhost eventmachine ruby-on-rails-4

5
推荐指数
1
解决办法
7570
查看次数