代码之家  ›  专栏  ›  技术社区  ›  Chris Harris

在Ruby/Rails中读取TCPSocket的速度很慢

  •  0
  • Chris Harris  · 技术社区  · 17 年前

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

    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
    

    谢谢

    1 回复  |  直到 17 年前
        1
  •  5
  •   Robert S. Barnes Antoni    17 年前

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

    更详细地说,当调用 write / send Nagle algorithm

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

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

    你真正想测量的是什么?为什么?