2.1.2.3 建立连接

要建立与服务器的连接,您必须创建 的实例 Ndb_cluster_connection,其构造函数将集群连接字符串作为其参数。如果没有给出连接字符串,localhost 则假定为。

在调用该 Ndb_cluster_connection::connect() 方法之前,集群连接并未真正启动。当不带任何参数调用时,连接尝试将无限期地重试,每秒一次,直到成功。在建立连接之前不进行报告。

默认情况下,API 节点连接到最近的 数据节点。这通常是在与最近的同一台机器上运行的数据节点,因为可以使用共享内存传输而不是较慢的 TCP/IP。set_optimized_node_selection() 在某些情况下,这可能会导致负载分配不佳,因此可以通过在调用之前调用方法0作为其参数 来强制执行循环节点连接方案 connect()

connect()仅启动与 NDB Cluster 管理节点的连接。要启用与数据节点的连接,请 wait_until_ready() 在调用后使用connect()wait_until_ready()等待给定的秒数以建立与数据节点的连接。

在下面的示例中,初始化和连接在两个函数example_init() 和中处理example_end(),它们通过包含文件的方式包含在后续示例中 example_connection.h

示例 2-1:连接示例。 

#include <stdio.h>
#include <stdlib.h>
#include <NdbApi.hpp>
#include <mysql.h>
#include <mgmapi.h>

Ndb_cluster_connection* connect_to_cluster();
void disconnect_from_cluster(Ndb_cluster_connection *c);

Ndb_cluster_connection* connect_to_cluster()
{
  Ndb_cluster_connection* c;

  if(ndb_init())
    exit(EXIT_FAILURE);

  c= new Ndb_cluster_connection();

  if(c->connect(4, 5, 1))
  {
    fprintf(stderr, "Unable to connect to cluster within 30 seconds.\n\n");
    exit(EXIT_FAILURE);
  }

  if(c->wait_until_ready(30, 0) < 0)
  {
    fprintf(stderr, "Cluster was not ready within 30 seconds.\n\n");
    exit(EXIT_FAILURE);
  }

  return c;
}

void disconnect_from_cluster(Ndb_cluster_connection *c)
{
  delete c;

  ndb_end(2);
}

int main(int argc, char* argv[])
{
  Ndb_cluster_connection *ndb_connection= connect_to_cluster();

  printf("Connection Established.\n\n");

  disconnect_from_cluster(ndb_connection);

  return EXIT_SUCCESS;
}