Перейти к содержимому

Подключение к серверу

До этого CLI открывал базу внутри своего процесса. В серверном режиме файлами базы владеет сервер, а приложения отправляют запросы по TCP. radixdb-cli не является TCP-оболочкой. В этом упражнении запускается готовая клиентская программа: писать Rust-код или использовать ORM не требуется.

Используйте ту же рабочую копию исходников и инструменты Linux, что в главе «Начало работы», и два окна терминала в корне репозитория. Пример работает с новой базой, а не с базой сотрудников из предыдущих глав. Не открывайте файлы работающего сервера одновременно локальным CLI.

В первом терминале:

Окно терминала
cargo build --locked --bin radixdb-server
./target/debug/radixdb-server --version

Собирайте клиент и сервер из одной ревизии исходников. У публичного клиентского workspace есть собственный зафиксированный lockfile, поэтому собирайте его без изменения набора зависимостей:

Окно терминала
cargo build --locked \
--manifest-path examples/public/rust-client/Cargo.toml \
--bin basic

Проверенная база исходников RadixDB 1.2 использует протокол 17. Перед запуском сверьте идентификатор сервера: локальная сборка исходников сейчас сообщает версию приложения 1.1.0, полную ревизию Git и версию протокола.

Убедитесь, что порт 15443 свободен:

Окно терминала
ss -ltn 'sport = :15443'

Под заголовком не должно быть строки слушающего сокета. Если порт занят, выберите другой свободный и замените его в конфигурации и команде клиента; не останавливайте посторонний сервис.

Создайте отдельный временный каталог данных и конфигурацию:

Окно терминала
server_dir=$(mktemp -d /tmp/radixdb-server-tutorial.XXXXXX) || exit 1
cat > "$server_dir/server.toml" <<EOF
[server]
bind_ip = "127.0.0.1"
port = 15443
data_dir = "$server_dir/data"
EOF
./target/debug/radixdb-server --config "$server_dir/server.toml"

Дождитесь radixdb-server listening on 127.0.0.1:15443. Оставьте терминал работающим. Сообщение подтверждает наличие слушающего сокета, но не успешное открытие конкретной базы. База открывается, когда её выбирает клиент.

Оставьте этот пример на интерфейсе обратной петли. Поскольку verifier root в конфигурации отсутствует, сервер допускает root без пароля только на этом plaintext endpoint обратной петли. Обычные приложения входят как субъекты каталога с правом CONNECT; администраторы могут настроить пароль root, а для передачи учётных данных через недоверенную сеть доступен прямой TLS endpoint. Перед развёртыванием прочитайте главы «Аутентификация» и «Управление доступом».

Во втором терминале, из того же корня репозитория:

Окно терминала
env -u RADIXDB_PASSWORD RADIXDB_LOGIN=root \
./examples/public/rust-client/target/debug/basic \
127.0.0.1:15443 manual_notes

Команда явно исключает случайное наследование постороннего пароля из оболочки. Пример подключается, проходит аутентификацию, выбирает manual_notes, создаёт таблицу, вставляет две строки и читает их через курсор. Ожидаемый вывод:

inserted rows: 1
last insert id: 1
notes:
1 | first note | false
2 | second note | true

Выбор базы создаёт или открывает <server_dir>/data/databases/manual_notes. При каждом запуске пример удаляет и заново создаёт rt_client_notes: не направляйте его на базу с важными данными. Временный каталог отделяет упражнение от остальных баз.

Клиент завершается после закрытия соединения. Сервер продолжает работать: закрытие клиентского соединения и остановка сервера являются разными операциями.

Вернитесь в первый терминал и нажмите Ctrl+C. Дождитесь radixdb-server stopped cleanly и приглашения оболочки. Файлы остаются во временном каталоге. Только после остановки проверьте server_dir и удалите именно этот каталог, если он больше не нужен. Не удаляйте файлы работающего сервера.

Отказ в подключении обычно означает, что процесс не слушает указанный адрес. Проверьте первый терминал и порт; не меняйте адрес привязки на внешний интерфейс, пытаясь обойти локальную ошибку запуска.

Далее перейдите к клиентским интерфейсам, чтобы выбрать между встраиваемым доступом, TCP-соединением и ORM.