Firebase SSE (отправленные сервером события) REST. Монитор + запись по тому же соединению - PullRequest
0 голосов
/ 31 января 2020

Я делаю этот тест с модулем Wi-Fi ESP8266. Я хочу постоянно поддерживать соединение с Google Firebase, следить за изменениями в значениях базы данных, а также иметь возможность записи в нее и выполнять обе операции с одним и тем же соединением. Это возможно? Потому что, делая разные вещи, они работают.

Это моя тестовая база данных:

enter image description here

СИТУАЦИЯ 1 - РАБОТАЕТ - МОНИТОР

(1) Откройте TCP / SSL-соединение с eletronica-ab6b1.firebaseio.com, порт 443. (2) Отправьте следующий HTTP-пакет: GET /database333.json?auth=DZSQwLoNWAneWA9BcEfAgnelmY965pq98HF4pITU HTTP/1.1 Host: eletronica-ab6b1.firebaseio.com Accept: text/event-stream LINE FEED (3) Делая это, я получаю уведомление всякий раз, когда изменяется «val», и Google отправляет пакет подтверждения активности каждые 30 секунд. Это работает.

СИТУАЦИЯ 2 - РАБОТАЕТ - НАПИШИТЕ

(1) Откройте TCP / SSL-соединение с eletronica-ab6b1.firebaseio.com, порт 443. (2) Отправьте следующий HTTP-пакет: PATCH /database333.json?auth=DZSQwLoNWAneWA9BcEfAgnelmY965pq98HF4pITU HTTP/1.1 Host: eletronica-ab6b1.firebaseio.com Content-Type: application/json Content-Length: 13 "LINE FEED" {"val":"555"} (3) При этом значение «555» правильно записывается в базу данных.

СИТУАЦИЯ 3 - НЕ РАБОТАЕТ - ПОПРОБУЙТЕ СМЕШАТЬ ИХ

(1) Открыть TCP / SSL-соединение с eletronica-ab6b1.firebaseio .com, порт 443. (2) Отправьте первый HTTP-пакет: GET /database333.json?auth=DZSQwLoNWAneWA9BcEfAgnelmY965pq98HF4pITU HTTP/1.1 Host: eletronica-ab6b1.firebaseio.com Accept: text/event-stream LINE FEED (3) На данный момент я отслеживаю изменения в базе данных и получаю пакет подтверждения активности от Google каждые 30 секунд. Хорошо, пока здесь. (4) И затем я отправляю следующий HTTP-пакет, пытаясь записать в базу данных: « PATCH /PIC.json?auth=DZSQwLoNWAneWA9BcEfAgnelmY965pq98HF4pITU HTTP/1.1 Host: eletronica-ab6b1.firebaseio.com Content-Type: application/json Content-Length: 13 LINE FEED {"val":"333"} (5) При этом я пытался записать в базу данных, используя то же соединение, но операция записи не сработала.

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

1 голос
/ 31 января 2020

Для прослушивания и записи в базу данных Firebase Realtime через потоковый REST API потребуется два отдельных соединения. Невозможно выполнить операции записи по тому же соединению, что и операция непрерывного чтения.


Некоторые дополнительные сведения

API REST для потоковой передачи базы данных Firebase Realtime Database реализовано с использованием протокола REST Server-Sent Events (SSE). SSE является однонаправленным: каждое соединение либо отправляет данные , либо получает данные, но не оба одновременно.

Будучи основанным на SSE, это значительно упрощает его реализацию в существующих средах HTTP по сравнению, например, с двунаправленным протоколом веб-сокетов, который база данных Firebase Realtime использует для своих внутренних соединений SDK-сервер.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...