0

我正在线程内运行与twitter gem的流连接。我通过简单地杀死线程并打开一个新线程来断开连接。我在新旧线程之间有重叠,所以我不会错过任何东西(希望如此)。

但是如果我快速杀死一些,我会收到Exceeded connection limit for user来自 API 的错误。这是因为 twitter 一次只允许 2 个连接。似乎连接仍然打开...

有没有办法使用 twitter gem 断开连接?我想在杀死线程之前断开流,这样我就知道有多少是打开的。

我的代码看起来像这样:

thred = Thread.new do
  client = ::Twitter::Streaming::Client.new(..config..)
  client.filter(follow: '1,2,44') do |tweet|
    // do stuff
  end
end

我像这样杀死他们:

thred.kill

但我想运行类似的东西:

client.disconnect

然后整理死线什么的...

4

1 回答 1

0

感谢@tin-nguyen 将我引导至文档。

我的解决方案是这样的:

thredbo = lambda do |client, str|
  Thread.current.thread_variable_set(:client, client)

  follows = '1,2,3,4' # twitter ids. This is where I query the DB for accounts.

  client.filter(follow: follows) do |tweet|
    puts [str, 'client response'].join(' ')
  end

  puts [str, 'connection closed'].join(' ')
end

config = {} # your credentials

main = Thread.new(
  ::Twitter::Streaming::Client.new(config),
  'main',
  &thredbo
)

# close
main.thread_variable_get(:client).close

连接关闭后,线程完成。

于 2020-03-26T01:37:17.360 回答