簡體   English   中英

ssl`sysread_nonblock':到達文件末尾(EOFError)

[英]ssl`sysread_nonblock': end of file reached (EOFError)

我編寫了一個使用ruby線程的代碼。

require 'rubygems'
require 'net/http'
require 'uri'

def get_response()

  uri = URI.parse('https://..........')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  -----
  -----
end

t1 = []
15.times do |i|
t1[i] = Thread.new{
hit_mdm(i)
sleep(rand(0)/10.0)
}
end

t1.each {|t| t.join}

代碼工作正常,但當程序到達終點時,它會拋出以下錯誤:

ruby / 2.0.0 / openssl / buffering.rb:174:在`sysread_nonblock'中:到達文件末尾(EOFError)

如何克服這個問題。

def getHttp(uri)
    begin       
        http = Net::HTTP.new(uri.host, uri.port)        
    rescue
        p 'failed Net::HTTP.new', uri
        retry       
    end
    http
end 

基於downvoted答案,我附上了一些代碼來顯示一個catch異常示例

你沒有指定hit_mdm()是什么,但可能是考慮到你之前的Net :: HTTP設置調用get_response。

網上有很多地方你可以找到證據證明Net :: HTTP 可能是線程安全的,但沒有結論。

我已經使用Net :: HTTP和線程進行了大量的壓力測試,我的經驗是EOFErrors是多個HTTP連接的常見問題。 是否由於服務器或客戶端或連接或Net :: HTTP庫的發生將非常難以調試,特別是使用執行TCP通信的線程代碼,在某種意義上也是線程化的。

您可以使用wireshark來確定EOFError的來源,或者,您可以省去很多頭痛並且只是在sysread上救出EOFError(您的回溯可以告訴您在何處進行救援,因此它只會影響網絡: :HTTP調用,如果這是生成EOFError的地方)。

但沒有更多信息,我們無法真正告訴你為什么EOFError肯定會發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM