title: How io.adapter works under the hood?
body: <p>I'm working on 1-1 chat rooms application powered by node.js + express + socket.io. 
  I am following the article: <a href="http://socket.io/docs/rooms-and-namespaces/">Socket.IO - Rooms and Namespaces</a></p>
  
  <p>In the article they demonstrate how to initiate the <code>io.adapter</code> using the module <code>socket.io-redis</code>: </p>
  
  <pre><code>var io = require('socket.io')(3000);
  var redis = require('socket.io-redis');
  io.adapter(redis({ host: 'localhost', port: 6379 }));
  </code></pre>
  
  <h2>Two questions:</h2>
  
  <ol>
  <li>In the docs, They are mentioning two more arguments: <code>pubClient</code> and <code>subClient</code>. Should I supply them? What's the difference?</li>
  <li>How the io.adapter behaves? For example, if user A is connected to server A and user B is server B, and they want to "talk" with each other. What's going under the hood?</li>
  </ol>
  
  <p>Thanks.</p>