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

Тот же контракт через WebSocket

Запуск fastdoc-cli с WebSocket на локальном адресе, порядок подключения с пропуском, минимальный клиентский цикл и отличия от обмена строками JSON.

WebSocket удобен, если оболочка вашего продукта уже асинхронная и построена на веб-технологиях. Ядро само выбирает свободный локальный порт и печатает одну строку с адресом подключения и разовым пропуском.

Окно терминала
cd ~/Desktop/A4-API-first-run
node a4-websocket-demo.mjs
  1. Запустите fastdoc-cli serve --ws 0 как дочерний процесс. Ноль означает «любой свободный порт».
  2. Прочитайте первую строку stdout — в ней host, port, token и schema.
  3. Подключитесь к ws://127.0.0.1:<port>/?token=<token>, подставив значения из этой строки.
  4. Дождитесь приветствия сеанса со схемой fastdoc.session-serve.v1.
  5. Отправляйте те же объекты JSON, что и через JSONL.
  6. При закрытии приложения сначала отправьте shutdown, затем закройте сокет и дочерний процесс.
1. WebSocket: ws://127.0.0.1:52601
2. Session protocol: fastdoc.session-serve.v1
3. Ping: true
4. Before: This is a sample word document. It has two pages, but no headers or footers.
5. After: WS API DEMO: This is a sample word document. It has two pages, but no headers or footers.
6. Saved: /Users/tester/Desktop/A4-API-first-run/api-demo-websocket-result.docx
7. Reopened from disk: WS API DEMO: This is a sample word document. It has two pages, but no headers or footers.
RESULT: PASS
const child = spawn(cli, ["serve", "--ws", "0"]);
const bootstrap = JSON.parse(await firstLine(child.stdout));
const ws = new WebSocket(
`ws://${bootstrap.host}:${bootstrap.port}/?token=${bootstrap.token}`
);
await new Promise(resolve =>
ws.addEventListener("open", resolve, { once: true }));
ws.send(JSON.stringify({ id: "p1", cmd: "ping" }));

Ассистент документации

Ответ собран из документации и может быть неточным — сверяйтесь с источниками.