def METHOD_NAME(self):
    self._ctx = zmq.Context()
    self._client_socket = self._ctx.socket(zmq.REQ)
    ### NOTE: change the method to exit client when server is dead if there are better solutions
    self._client_socket.setsockopt(zmq.RCVTIMEO,
                                   ConnectMessage.TIMEOUT * 1000)
    client_address = "{}:{}".format(self._ip, self._port)
    self._client_socket.connect("tcp://{}".format(client_address))
    self._client_socket.send_multipart([
        pickle.dumps(ConnectMessage.INIT), pickle.dumps(self._client_name)
    ])
    message = self._client_socket.recv_multipart()
    if pickle.loads(message[0]) != ConnectMessage.INIT_DONE:
        _logger.error("Client {} init failure, Please start it again".
                      format(self._client_name))
        pid = os.getpid()
        os.kill(pid, signal.SIGTERM)
    _logger.info("Client {}: connect to server success!!!".format(
        self._client_name))
    _logger.debug("Client {}: connect to server {}".format(
        self._client_name, client_address))