code: function Session(request, socket, head) {
  	stream.Duplex.call(this, {
  		decodeStrings: false,
  		readableObjectMode: true
  	});
  
  	/**
  	 * The state of the session.
  	 * @type {number}
  	 */
  	this.state = STATE_CONNECTING;
  
  	/**
  	 * An instance of http.IncomingMessage.
  	 * @type {http.IncomingMessage}
  	 * @see  {@link https://nodejs.org/api/http.html#http_class_http_incomingmessage}
  	 */
  	this.request = request;
  
  	/**
  	 * The net.Socket object associated with the connection.
  	 * @type {net.Socket}
  	 */
  	this.socket = socket;
  
  	/**
  	 * An alias of {@link Session#socket}.
  	 * @type {net.Socket}
  	 */
  	this.connection = socket;
  
  	this.closeCode = null;
  
  	this.closeReason = '';
  
  	this.closeTimeout = 30000;
  
  	this._closeTimer = null;
  
  	this._decoder = null;
  
  	if (head && head.length) {
  		socket.unshift(head);
  	}
  }
docs: WebSocket Session
  @constructor
  @extends stream.Duplex
  @param   {http.IncomingMessage} request see {@link Session#request}
  @param   {net.Socket}           socket  see {@link Session#socket}
  @param   {Buffer}               [head]  Data that received with headers.