title: Which Java RMI/RPC/IPC technology should I use?
body: <p>I'm developing a Java application that consists of a server and a client (possibly multiple clients in future) which may run on different hosts.</p>
  
  <p>For communication between these two I currently use a custom protocol which consists of JSON messages that are sent over network sockets and that are converted back to Java Bean objects on both sides. However the more complex the application gets I notice that this method doesn't meet my standards and is too complex.</p>
  
  <p>I'm looking for a well established, possibly standardized alternative.</p>
  
  <p>I've looked at Remote Method Invocation (RMI) but read that the protocol is slow (big network overhead).</p>
  
  <p>The technology I'm looking for should be lightweight (protocol and library wise), robust, maybe support compression (big plus if it does!), maybe support encryption, well document and well established (e.g. an Apache project). It should be as easy as calling a method on a remote object with RMI but without its disadvantages.</p>
  
  <p>What can you recommend?</p>