lib/services.js
function StatelessClientChannel(client, writableFactory, opts) {
  ClientChannel.call(this, client, opts);
  this._writableFactory = writableFactory;

  if (!opts || !opts.noPing) {
    // Ping the server to check whether the remote protocol is compatible.
    // If not, this will throw an error on the channel.
    debug('emitting ping request');
    this.ping();
  }
}
function StatelessClientChannel(client, writableFactory, opts) {
  ClientChannel.call(this, client, opts);
  this._writableFactory = writableFactory;

  if (!opts || !opts.noPing) {
    // Ping the server to check whether the remote protocol is compatible.
    // If not, this will throw an error on the channel.
    debug('emitting ping request');
    this.ping();
  }
}
function StatelessClientChannel ( client , writableFactory , opts ) { ClientChannel . call ( this , client , opts ) ; this . _writableFactory = writableFactory ; if ( ! opts || ! opts . noPing ) { // Ping the server to check whether the remote protocol is compatible. // If not, this will throw an error on the channel. debug ( 'emitting ping request' ) ; this . ping ( ) ; } }
Factory-based client channel.

This channel doesn't keep a persistent connection to the server and requires
prepending a handshake to each message emitted. Usage examples include
talking to an HTTP server (where the factory returns an HTTP request).

Since each message will use its own writable/readable stream pair, the
advantage of this channel is that it is able to keep track of which response
corresponds to each request without relying on transport ordering. In
particular, this means these channels are compatible with any server
implementation.
Factory - based client channel .