Ruby核心附带的Net :: HTTP API中有几种方法。诸如Net :: HTTP.get,Net :: HTTP.get_response和Net :: HTTP.post_form之类的对象不会持久连接。但是,:: start和:: new确实可以保持连接。实际上,:: start会使一个块保持打开连接状态,直到该块退出:
uri = URI("example.com")
Net::HTTP.start(uri.host, uri.port) do |http|
response1 = http.get('path1')
response2 = http.get('path2')
end
现在您可以使用:: new代替:: start:
http = Net::HTTP.new('example.com')
http.start
response1 = http.get('path1')
response2 = http.get('path2')
但是我必须手动关闭连接吗?这是必须的还是我可以不使用它?
begin
http = Net::HTTP.new('example.com')
http.start
response1 = http.get('path1')
response2 = http.get('path2')
ensure
http.finish
end
如果我跳过结束呼叫,这会在应用程序中造成某种some肿或内存泄漏吗?
答案 0 :(得分:0)
根据文档,使用new
不会打开连接:
创建一个新的Net :: HTTP对象,而无需打开TCP连接或 HTTP会话。
但是要回答您的问题,是的,您应该在使用它们后关闭连接。该连接最终将关闭,但这是一个坏习惯,不要在使用完非托管资源后清理它们。
首选方法是您演示的方法,将start
与块一起使用,可确保在块退出时连接将关闭。
编辑
我不够具体。我指的是类方法start
,而不是实例方法start
。类方法签名如下所示:
start(address, port, p_addr, p_port, p_user, p_pass, &block)
start(address, port=nil, p_addr=nil, p_port=nil, p_user=nil, p_pass=nil, opt, &block)
可以找到它的文档here,尽管我相信您已经可以确定参数了。