Uploaded image for project: 'XML-RPC'
  1. XML-RPC
  2. XMLRPC-169

XmlRpcSunHttpTransport creates a new connection for every request.

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 3.1.3
    • Fix Version/s: 3.1.4
    • Component/s: Source
    • Labels:
      None
    • Environment:
      Solaris

      Description

      An instance of XmlRpcSunHttpTransport creates a new connection to the server for every request that is made via it. That's horrendously expensive where the connection is a SSL connection.

      Here's a trace, note the repeated connect() calls.

      /2: connect(20, 0xFE32E4D0, 32, SOV_DEFAULT) = 0
      /2: getsockname(20, 0xFE32E4D0, 0xFE32E618, SOV_DEFAULT) = 0
      /2: setsockopt(20, tcp, TCP_NODELAY, 0xFE32E768, 4, SOV_DEFAULT) = 0
      /2: send(20, " P O S T / H T T P /".., 283, 0) = 283
      /2: send(20, " < ? x m l v e r s i o".., 215, 0) = 215
      /2: read(20, " H T T P / 1 . 0 2 0 0".., 8192) = 84
      /2: read(20, " < ? x m l v e r s i o".., 8108) = 202
      /2: ioctl(20, FIONREAD, 0xFE32E684) = 0
      /2: fcntl(21, F_DUP2FD, 0x00000014) = 20
      /2: close(20) = 0
      /2: so_socket(PF_INET6, SOCK_STREAM, IPPROTO_IP, 0x00000000, SOV_DEFAULT) = 20
      /2: connect(20, 0xFE32E4D0, 32, SOV_DEFAULT) = 0
      /2: getsockname(20, 0xFE32E4D0, 0xFE32E618, SOV_DEFAULT) = 0
      /2: setsockopt(20, tcp, TCP_NODELAY, 0xFE32E768, 4, SOV_DEFAULT) = 0
      /2: send(20, " P O S T / H T T P /".., 283, 0) = 283
      /2: send(20, " < ? x m l v e r s i o".., 215, 0) = 215
      /2: read(20, " H T T P / 1 . 0 2 0 0".., 8192) = 84
      /2: read(20, " < ? x m l v e r s i o".., 8108) = 202
      /2: ioctl(20, FIONREAD, 0xFE32E684) = 0
      /2: fcntl(21, F_DUP2FD, 0x00000014) = 20
      /2: close(20) = 0
      /2: so_socket(PF_INET6, SOCK_STREAM, IPPROTO_IP, 0x00000000, SOV_DEFAULT) = 20
      /2: connect(20, 0xFE32E4D0, 32, SOV_DEFAULT) = 0
      /2: getsockname(20, 0xFE32E4D0, 0xFE32E618, SOV_DEFAULT) = 0
      /2: setsockopt(20, tcp, TCP_NODELAY, 0xFE32E768, 4, SOV_DEFAULT) = 0
      /2: send(20, " P O S T / H T T P /".., 283, 0) = 283
      /2: send(20, " < ? x m l v e r s i o".., 215, 0) = 215
      /2: read(20, " H T T P / 1 . 0 2 0 0".., 8192) = 84
      /2: read(20, " < ? x m l v e r s i o".., 8108) = 202
      /2: ioctl(20, FIONREAD, 0xFE32E684) = 0
      /2: fcntl(21, F_DUP2FD, 0x00000014) = 20
      /2: close(20) = 0
      /2: so_socket(PF_INET6, SOCK_STREAM, IPPROTO_IP, 0x00000000, SOV_DEFAULT) = 20
      /2: connect(20, 0xFE32E4D0, 32, SOV_DEFAULT) = 0
      /2: getsockname(20, 0xFE32E4D0, 0xFE32E618, SOV_DEFAULT) = 0
      /2: setsockopt(20, tcp, TCP_NODELAY, 0xFE32E768, 4, SOV_DEFAULT) = 0
      /2: send(20, " P O S T / H T T P /".., 283, 0) = 283
      /2: send(20, " < ? x m l v e r s i o".., 215, 0) = 215
      /2: read(20, " H T T P / 1 . 0 2 0 0".., 8192) = 84
      /2: read(20, " < ? x m l v e r s i o".., 8108) = 202
      /2: ioctl(20, FIONREAD, 0xFE32E684) = 0
      /2: fcntl(21, F_DUP2FD, 0x00000014) = 20
      /2: close(20) = 0

      And if you assume that a major use of the Apache XML-RPC client is with the Apache XML-RPC server, it means the keepalive support in the server is pretty much a waste of time.

        Attachments

        1. XMLRPC-169.patch
          4 kB
          Alan Burlison

          Issue Links

            Activity

              People

              • Assignee:
                jochen@apache.org Jochen Wiedmann
                Reporter:
                alanbur Alan Burlison
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: