Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Асинхронное API для клиента / 25 сообщений из 54, страница 1 из 3
12.02.2022, 19:33
    #40133763
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Гугл не помог. Существуют ли в природе? Если нет, то планируется ли?
...
Рейтинг: 0 / 0
12.02.2022, 19:50
    #40133767
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Не существует. В пределах официального проекта не планируется.

Как ты его себе представляешь и зачем? Просто несколько коннектов в разных
потоках не помогут?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.02.2022, 20:01
    #40133770
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Как раз ради того, чтобы не делать по коннекту на поток. С асинхронным API возможно работать с кучей соединений даже в одном потоке. А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API.
...
Рейтинг: 0 / 0
12.02.2022, 20:14
    #40133773
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDenС асинхронным API возможно работать с кучей соединений даже в одном потоке. А
если ещё и язык поддерживает асинхронные операции, то использование такого API
почти ничем не отличается от использования обычного API.

Совершенно отличается. Одна только "неприкосновенность буферов до реального
выполнения операции" способна сорвать крышу каждому первому дельфину.

Когда ты последний раз работал с реально асинхронным вводом-выводом, например?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.02.2022, 20:35
    #40133775
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Про неприкосновенность буферов не понял.
Последний раз работал на этой неделе. Просто задействовал асинхронное api для файловых операций. Оно работает из коробки и не требует выдающихся умений у программиста )
...
Рейтинг: 0 / 0
12.02.2022, 23:59
    #40133789
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Dimitry Sibiryakov

Не существует. В пределах официального проекта не планируется.

Как ты его себе представляешь и зачем? Просто несколько коннектов в разных
потоках не помогут?..


Видимо, речь идёт о совместимости с асинхронными конструкциями async / await некоторых современных языков программирования.
Наверняка такие библиотеки имеются. Как у них организована асинхронность обращений к FB - это другой вопрос. В простейшем случае могут создавать отдельный поток на каждое обращение к БД, чтобы не блокировать главный поток.
...
Рейтинг: 0 / 0
13.02.2022, 10:16
    #40133803
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDen
А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API.


Сегодня выспался и понял, что вчера ночью неправильно написал. Хотел написать "использование высокоуровневой обёртки вокруг такого API почти ничем не отличается от использования обычного высокоуровнего API"

Т.е. в итоге программист уже использует что-то вроде
Код: plaintext
1.
2.
3.
4.
db = connect(blabla).await
tr = db.create_transaction().await
st = tr.execute("select blabla").await
row = st.fetch().await
...
Рейтинг: 0 / 0
13.02.2022, 11:19
    #40133807
ggreggory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDen

Т.е. в итоге программист уже использует что-то вроде


а какой профит? сервер же не будет всё это делать параллельно.
...
Рейтинг: 0 / 0
13.02.2022, 11:31
    #40133811
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Компилятор такие конструкции компилириует таким образом, что на при ожидании await рантайм переключит выполнение этого потока на другую задачу, которая уже завершила свою асинхронную операцию (вышла из await) и готова продолжать выполнение. Таким образом всё выполняется как-бы параллельно. В реальности используется не один поток, а больше (обычно по количеству ядер или кратно в несколько раз) и поэтому без создания 100500 потоков можно работать с большим количеством задач и соединений к базе (десятки тысяч). Подобную возможность завезли уже в кучу языков. Даже в C++ добавили в последнем стандарте.

Но это обсуждение уже выходит за рамки моего вопроса. Ответ был получен. Всем спасибо )
...
Рейтинг: 0 / 0
13.02.2022, 13:36
    #40133818
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDenпри ожидании await рантайм переключит выполнение этого потока на другую задачу,
которая уже завершила свою асинхронную операцию (вышла из await) и готова
продолжать выполнение.

Какая это задача? В твоём примере таких не наблюдается, всё выполняется строго
последовательно, полностью синхронно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2022, 13:46
    #40133819
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Я показал просто пример использования API. В реальном приложении будет что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
asynch task1:
    db = connect_db(blabla).await
    tr = db.create_transaction().await
    st = tr.execute("select blabla").await
    row = st.fetch().await

asynch task2:
    db = connect_db(blabla).await
    tr = db.create_transaction().await
    st = tr.execute("select blabla").await
    row = st.fetch().await

asynch task3:
    file = open(filename).await
    file_data = file.read_all().await

asynch task4:
   socket = connect_socket(blabla).await

asynch task5:

... и так далее

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

В сети много инфы для чего нужен и как устроен этот механизм в разных языках и фреймворках
...
Рейтинг: 0 / 0
13.02.2022, 13:48
    #40133820
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
А ещё там много котиков и предложений увеличить пенис. Толку-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2022, 14:00
    #40133821
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
так node-firebird-driver асинхронный. работает как часы ))
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
export const loadRDBFields = async (attachment: Attachment, transaction: Transaction) => {
  const rs = await attachment.executeQuery(transaction, `
    SELECT 
      TRIM(rdb$field_name) AS rdb$field_name,
      CAST(rdb$validation_source AS VARCHAR(255)) AS rdb$validation_source,
      CAST(rdb$computed_source AS VARCHAR(255)) AS rdb$computed_source, 
      CAST(rdb$default_source AS VARCHAR(255)) AS rdb$default_source, 
      rdb$field_length,
      rdb$field_scale,
      rdb$field_type,
      rdb$field_sub_type,
      rdb$system_flag,
      rdb$null_flag,
      rdb$character_length,
      rdb$collation_id,
      rdb$character_set_id,
      rdb$field_precision
    FROM 
      rdb$fields
  `);
  try {
    return (await rs.fetchAsObject<IRDBField>()).reduce( (p, r) => (p[r.RDB$FIELD_NAME] = r, p), {} as IRDBFields);
  } finally {
    await rs.close();
  }
};
...
Рейтинг: 0 / 0
13.02.2022, 14:20
    #40133822
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Если он использует синхронное родное API, то он не асинхронный, а только имитирует асинхронность. В node.js без асинхронности никуда, поэтому даже имитация сойдёт.

Но у них там написано: There is also plan to create a socket-based (pure Node.js) driver.

Так что возможно что будет полноценный асинхронный драйвер для ноды

Если родное API не поддерживает асинхронность, то единственный способ сделать асинхронный клиент - это написать сетевой обмен самостоятельно.
...
Рейтинг: 0 / 0
13.02.2022, 15:04
    #40133826
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDenединственный способ сделать асинхронный клиент - это написать сетевой обмен
самостоятельно.

Создателям драйверов для Явы, Питона и С-шарпа это удалось, так что и остальным
можно брать флаг в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2022, 15:19
    #40133827
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Надо будет посмотреть их реализацию. Интересно, где описание сетевого обмена брали? Смотрели в исходниках fb или где-то доки есть?
...
Рейтинг: 0 / 0
13.02.2022, 15:24
    #40133828
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
...
Рейтинг: 0 / 0
13.02.2022, 15:31
    #40133829
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Спасибо.

Сразу замечание. Там не написано как числа передаются: в BE или LE?
...
Рейтинг: 0 / 0
13.02.2022, 23:44
    #40133868
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Ну и вызывает вопросы актуальность. Например тут: https://firebirdsql.org/file/documentation/html/en/firebirddocs/wireprotocol/firebird-wire-protocol.html#wireprotocol-databases-attach-attachment
Не верится, что пароль открытым текстом по сети передаётся. Похоже лучше смотреть готовую реализацию
...
Рейтинг: 0 / 0
14.02.2022, 09:28
    #40133895
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDen,

это зависит от плагина аутентификации
...
Рейтинг: 0 / 0
14.02.2022, 10:41
    #40133906
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Даже до появления SRP пароль не передавался в открытом виде - только его хеш.
...
Рейтинг: 0 / 0
14.02.2022, 14:22
    #40133979
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
А что насчёт BE и LE? Если посмотреть сишарпоский вариант, то там байты для отправки по сети из числа типа int32 получают вот так:
Код: c#
1.
2.
3.
4.
public static byte[] EncodeInt32(int value)
{
	return BitConverter.GetBytes(IPAddress.NetworkToHostOrder(value));
}


(даже тип IPAddress для этого задействовали )) )

Я догадываюсь, то это означает BE, но хочется уточнить )
...
Рейтинг: 0 / 0
14.02.2022, 14:32
    #40133982
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
ArtDen
А что насчёт BE и LE?


Для локального протокола (XNET) нет преобразования.
Для удалёного (INET) - числа передаются в сетевом порядке (htonl, ntohl)

PS Смотри src\remote\protocol.cpp и src\common\xdr.cpp
там ответы на 99% вопросов о протоколе.
...
Рейтинг: 0 / 0
14.02.2022, 20:47
    #40134097
ArtDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
hvlad, неподготовленному глазу проще смотреть исходники не fb, а сторонних драйверов, т.к. они заточены только под одну задачу - работа в качестве клиента fb.
Сегодня потратил полдня в попытке понять почему сервер не отвечает на даже первую посылку. Слава богу что по сниферу понял, что тип Buffer надо "добивать" в конце нулями до длины кратной 4 (( А ведь тут об этом вообще не слова. А я поленился посмотреть как это сделано в csharp-ском драйвере, на который сейчас ориентируюсь
...
Рейтинг: 0 / 0
14.02.2022, 23:06
    #40134107
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное API для клиента
Это базовая спецификация XDR.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Асинхронное API для клиента / 25 сообщений из 54, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]