code: func (s *Server) Upgrade(w http.ResponseWriter, r *http.Request) Connection {
  	conn, err := s.upgrader.Upgrade(w, r, w.Header())
  	if err != nil {
  		// caller should handle the error: http.Error(w, fmt.Sprintf("websocket error: %v\n", err), http.StatusServiceUnavailable)
  		return &connection{err: err}
  	}
  
  	return s.handleConnection(w, r, conn)
  }
docs: // Upgrade upgrades the HTTP Server connection to the WebSocket protocol.
  //
  // The responseHeader is included in the response to the client's upgrade
  // request. Use the responseHeader to specify cookies (Set-Cookie) and the
  // application negotiated subprotocol (Sec--Protocol).
  //
  // If the upgrade fails, then Upgrade replies to the client with an HTTP error
  // response and the return `Connection.Err()` is filled with that error.
  //
  // For a more high-level function use the `Handler()` and `OnConnecton` events.
  // This one does not starts the connection's writer and reader, so after your `On/OnMessage` events registration
  // the caller has to call the `Connection#Wait` function, otherwise the connection will be not handled.
  //
  // Caller should handle the error based on the connection's Err().