gpt4 book ai didi

ruby-on-rails - 在 Ruby/Rails 中从 TCPSocket 读取很慢

转载 作者:可可西里 更新时间:2023-11-01 02:56:34 26 4
gpt4 key购买 nike

我有一段简单的代码可以写入套接字,然后从服务器读取响应。服务器速度非常快(每次响应在5ms以内)。然而,虽然写入套接字很快 - 从套接字读取响应总是慢得多。有什么线索吗?

module UriTester
module UriInfo
class << self
def send_receive(socket, xml)
# socket = TCPSocket.open("service.server.com","2316")
begin
start = Time.now
socket.print(xml) # Send request
puts "just printed the xml into socket #{Time.now - start}"
rescue Errno::ECONNRESET
puts "looks like there is an issue!!!"
socket = TCPSocket.open("service.server.com","2316")
socket.print(xml) # Send request
end
response=""
while (line =socket.recv(1024))
response += line
break unless line.grep(/<\/bcap>/).empty?
end
puts "SEND_RECEIVE COMPLETED. IN #{Time.now - start}"
# socket.close
response
end
end
end
end

谢谢!

最佳答案

在这种情况下,写入套接字总是比读取快得多,因为写入是在机器本地进行的,而读取必须等待网络上的响应。

更详细地说,当调用 write / send 时返回所有系统告诉你的是 N 字节已成功复制到套接字内核空间缓冲区。这并不意味着数据实际上已经通过网络发送了。事实上,数据可以在套接字缓冲区中保存很长时间(假设您使用的是 TCP)。这是因为一个叫做 Nagle algorithm 的东西。旨在有效利用网络带宽。这种看不见的 Nagle 延迟增加了往返时间以及您得到响应的时间。服务器也可能出于同样的原因延迟响应,从而增加响应时间。

因此,当您为写入计时并且它快速返回时,这实际上并不意味着任何有用的东西。

如前所述,从套接字读取的时间会更长,因为当您为读取计时时,您实际上是在计时往返行程时间加上服务器响应时间,这总是比复制所需的时间慢得多数据从用户空间程序到内核缓冲区。

您实际要衡量的是什么?为什么?

关于ruby-on-rails - 在 Ruby/Rails 中从 TCPSocket 读取很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com