|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Гугл не помог. Существуют ли в природе? Если нет, то планируется ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 19:33 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Не существует. В пределах официального проекта не планируется. Как ты его себе представляешь и зачем? Просто несколько коннектов в разных потоках не помогут?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 19:50 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Как раз ради того, чтобы не делать по коннекту на поток. С асинхронным API возможно работать с кучей соединений даже в одном потоке. А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 20:01 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDenС асинхронным API возможно работать с кучей соединений даже в одном потоке. А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API. Совершенно отличается. Одна только "неприкосновенность буферов до реального выполнения операции" способна сорвать крышу каждому первому дельфину. Когда ты последний раз работал с реально асинхронным вводом-выводом, например?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 20:14 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Про неприкосновенность буферов не понял. Последний раз работал на этой неделе. Просто задействовал асинхронное api для файловых операций. Оно работает из коробки и не требует выдающихся умений у программиста ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 20:35 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Не существует. В пределах официального проекта не планируется. Как ты его себе представляешь и зачем? Просто несколько коннектов в разных потоках не помогут?.. Видимо, речь идёт о совместимости с асинхронными конструкциями async / await некоторых современных языков программирования. Наверняка такие библиотеки имеются. Как у них организована асинхронность обращений к FB - это другой вопрос. В простейшем случае могут создавать отдельный поток на каждое обращение к БД, чтобы не блокировать главный поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 23:59 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API. Сегодня выспался и понял, что вчера ночью неправильно написал. Хотел написать "использование высокоуровневой обёртки вокруг такого API почти ничем не отличается от использования обычного высокоуровнего API" Т.е. в итоге программист уже использует что-то вроде Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 10:16 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen Т.е. в итоге программист уже использует что-то вроде а какой профит? сервер же не будет всё это делать параллельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 11:19 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Компилятор такие конструкции компилириует таким образом, что на при ожидании await рантайм переключит выполнение этого потока на другую задачу, которая уже завершила свою асинхронную операцию (вышла из await) и готова продолжать выполнение. Таким образом всё выполняется как-бы параллельно. В реальности используется не один поток, а больше (обычно по количеству ядер или кратно в несколько раз) и поэтому без создания 100500 потоков можно работать с большим количеством задач и соединений к базе (десятки тысяч). Подобную возможность завезли уже в кучу языков. Даже в C++ добавили в последнем стандарте. Но это обсуждение уже выходит за рамки моего вопроса. Ответ был получен. Всем спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 11:31 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDenпри ожидании await рантайм переключит выполнение этого потока на другую задачу, которая уже завершила свою асинхронную операцию (вышла из await) и готова продолжать выполнение. Какая это задача? В твоём примере таких не наблюдается, всё выполняется строго последовательно, полностью синхронно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 13:36 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Я показал просто пример использования API. В реальном приложении будет что-то типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Понятно что в реальности всё будет намного сложнее. Обычно создаются динамические пулы соединений и всякая другая фигня, экономящая время, но асинхронности это не отменяет. В сети много инфы для чего нужен и как устроен этот механизм в разных языках и фреймворках ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 13:46 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
А ещё там много котиков и предложений увеличить пенис. Толку-то?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 13:48 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
так 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 14:00 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Если он использует синхронное родное API, то он не асинхронный, а только имитирует асинхронность. В node.js без асинхронности никуда, поэтому даже имитация сойдёт. Но у них там написано: There is also plan to create a socket-based (pure Node.js) driver. Так что возможно что будет полноценный асинхронный драйвер для ноды Если родное API не поддерживает асинхронность, то единственный способ сделать асинхронный клиент - это написать сетевой обмен самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 14:20 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDenединственный способ сделать асинхронный клиент - это написать сетевой обмен самостоятельно. Создателям драйверов для Явы, Питона и С-шарпа это удалось, так что и остальным можно брать флаг в руки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 15:04 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Надо будет посмотреть их реализацию. Интересно, где описание сетевого обмена брали? Смотрели в исходниках fb или где-то доки есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 15:19 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
https://firebirdsql.org/file/documentation/html/en/firebirddocs/wireprotocol/firebird-wire-protocol.html Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 15:24 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Спасибо. Сразу замечание. Там не написано как числа передаются: в BE или LE? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 15:31 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Ну и вызывает вопросы актуальность. Например тут: https://firebirdsql.org/file/documentation/html/en/firebirddocs/wireprotocol/firebird-wire-protocol.html#wireprotocol-databases-attach-attachment Не верится, что пароль открытым текстом по сети передаётся. Похоже лучше смотреть готовую реализацию ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 23:44 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen, это зависит от плагина аутентификации ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 09:28 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Даже до появления SRP пароль не передавался в открытом виде - только его хеш. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 10:41 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
А что насчёт BE и LE? Если посмотреть сишарпоский вариант, то там байты для отправки по сети из числа типа int32 получают вот так: Код: c# 1. 2. 3. 4.
(даже тип IPAddress для этого задействовали )) ) Я догадываюсь, то это означает BE, но хочется уточнить ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 14:22 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen А что насчёт BE и LE? Для локального протокола (XNET) нет преобразования. Для удалёного (INET) - числа передаются в сетевом порядке (htonl, ntohl) PS Смотри src\remote\protocol.cpp и src\common\xdr.cpp там ответы на 99% вопросов о протоколе. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 14:32 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
hvlad, неподготовленному глазу проще смотреть исходники не fb, а сторонних драйверов, т.к. они заточены только под одну задачу - работа в качестве клиента fb. Сегодня потратил полдня в попытке понять почему сервер не отвечает на даже первую посылку. Слава богу что по сниферу понял, что тип Buffer надо "добивать" в конце нулями до длины кратной 4 (( А ведь тут об этом вообще не слова. А я поленился посмотреть как это сделано в csharp-ском драйвере, на который сейчас ориентируюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 20:47 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Это базовая спецификация XDR. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 23:06 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
По протоколам непонятно. Будет FB3 работать с 10-м протоколом или нет? Если нет, то какой минимальный протокол указывать для FB3? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 09:21 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Сам же и отвечаю: с 10м протоколом 3й FB не работает. Рвёт связь с ответом OP_REJECTED без объяснения причин ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:10 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
все современные версии ФБ поддерживают от протокола 10 (включительно) и выше. Так что должно работать. Он тебе прямо на op_connect возвращает op_reject? Если да, то покажи содержимое op_connect. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:15 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Ну если только в таком виде запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Ответ Код: plaintext
В запросе указываю плагин аутентификации Srp и список плагинов тоже Srp, шифрование вкл. Если же в запросе перечисляю протоколы с 10 по 17, то сервер отвечает нормально с OP_COND_ACCEPT FB V3.0.7.33374 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:30 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
10-й протокол это функциональность ФБ 1.5. Какое там шифрование или Srp? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:44 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen В запросе указываю плагин аутентификации Srp Или вы считаете, что можно скрестить лучшее из двух миров и ходить к новому серверу со старой версией протокола и новыми плагинами? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:47 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Я без понятия когда появился Srp. Гугл не помогает. И вообще по версиям протоколов fb гугл умалчивает. Видимо не знаю по каким словам гуглить )) Так в какой версии появился Srp? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 10:53 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen Я без понятия когда появился Srp. Гугл не помогает. Если описаниe протокола , которое вам рекомендовали, прямо во введении указывает, что описывает 10-ю и, частично, 11-ю версии протокола, не содержит ничего про плагины и шифрование, то, вероятно, будет алогично, указывать "какие-то там плагины" в этой версии протокола? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 11:04 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Basil A. Sidorov , хорошо, что хоть какое-то описание протокола есть. Но в целом оно малополезное и может служить лишь информацией для краткого ознакомления. Но что-то делать по этому описанию не имеет смысла. В нём про аутентификацию написано только 3 слова: "Buffer User identification". И больше нигде ничего ни слова про это не упоминается. Какие из этого выводы можно делать мне не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 11:09 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Тогда можно пошариться по исходникам, обнаружить protocol.h и, типа, с удивлением узнать, что: Код: plaintext 1.
А если читать примечания к выпуску , то окажется, что: "From version 3 onward, Firebird’s architecture supports plug-ins." И снова вдумчивое чтение позволяет делать обобщения невиданной глубины. Сарказм, если что. P.S. Вы правда думаете, что существует руководство для начинающих "Как правильно делать собственную реализацию сетевого протокола Firebird"? Или, всё-таки, надо сопоставить ваши хотелки с тем бюджетом времени, которые вы готовы потратить на ещё одну реализацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 11:39 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Можно много где рыться и много чего обнаружить, даже то, о чём писал Dimitry Sibiryakov )) Я лишь пытаюсь реализовать хотя бы подключение с аутентификацией по готовым решениям, упрощая всё до как мне кажется необходимого минимума. И соответственно удивляюсь, что с моей точки зрения всё идёт не по плану ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 12:18 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
"Никогда и ничего не доводи до абсурда, ибо человек, желающий трапезовать поздно вечером, рискует трапезовать рано по утру". Не надо делать априорных предположений там, где у вас нет вообще никакого опыта. Если получение опыта требует (много) времени - сопоставьте тот бюджет, который вы готовы потратить и тут хотелку, которая вам, типа, нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 17:05 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Уточню. Statement можно переиспользовать много раз после op_allocate_statement? Не обязательно каждый раз заново аллоцировать новый statement (и освобождать предыдущий) для выполнения нового запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 09:00 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Но закрывать курсор (op_free_statement + DSQL_close) перед новым prepare необходимо? Или это не обязательно? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 11:09 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen, обязательно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 11:37 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Нужна консультация по op_fetch_response. 1) Может ли сервер прислать ответ с count > 1 (под count имеется ввиду второй параметр) 2) После op_fetch сервер отвечает несколькими op_fetch_response, которые клиент должен вычитывать без отправки доп. команд серверу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 00:02 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen получаешь ровно столько же op_fetch_response, в каждом из них msg_count == 1 поправлюсь - можешь получить меньше, если курсор закончился посередине пачки. В последнем op_fetch_response будет msg_count == 0 (признак EOF). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 10:29 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
пардон, случайно вместо ответа затер предыдущее сообщение :-) ArtDen Нужна консультация по op_fetch_response. 1) Может ли сервер прислать ответ с count > 1 (под count имеется ввиду второй параметр) 2) После op_fetch сервер отвечает несколькими op_fetch_response, которые клиент должен вычитывать без отправки доп. команд серверу? 1) Нет. Ты отправляешь op_fetch с msg_count > 0, получаешь ровно столько же op_fetch_response, в каждом из них msg_count == 1. 2) Строго говоря, не обязательно. Просто чтобы обработать ответ на свою доп. команду, тебе все равно придется вычитать все op_fetch_response из буфера. Но если сильно хочется запросить новую пачку записей до вычитывания предыдущих - почему нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 10:33 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Т.е. отправляя op_fetch с msg_count, я гарантированно получаю op_fetch_response в количестве не более чем msg_count (каждое с msg_count == 1) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 10:42 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Повозившись в отладке, я идею понял так: после отправки op_fetch, я всегда вычитываю все ответы op_fetch_response пока не придёт ответ с msg_count = 0. Причём если у последнего ответа status == 100, то данные в курсоре закончились. А если status == 0, то данные ещё есть и их можно запросить через очередной op_fetch Это правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 14:42 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
да, все верно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 17:35 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Продолжаю мучать ) Хочу понять, когда стоит вызывать op_free_statement с DSQL_close. Понятно, что после выполнения запроса select точно надо. Но если, например, 1) был op_prepare_statement с select, но до op_execute дело не дошло или 2) было выполнение запроса с insert, update или delete? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 21:09 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDenХочу понять, когда стоит вызывать op_free_statement с DSQL_close. В соответствующей функции API. В нём по-любому должна быть функция закрытия курсора. Или ты хочешь делать это автоматически после вытаскивания всего резалт-сета? Тогда не забудь удостовериться, что он однонаправленный и не FOR UPDATE. А то нехорошо получится если пользователь захочет с ним что-нибудь сделать, а ты его уже закрыл... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 23:09 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я имею ввиду в каких случаях надо вызывать op_free_statement с DSQL_close перед повторным op_prepare_statement или op_execute ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 23:35 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
В том, когда предыдуший op_execute породил курсор. Для которого, собственно, и делается "close". Ты бы эта... Для начала работу обычного ISC API изучил. Оно на протокол отображается один-к-одному. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 01:03 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Можно и изучить, но спросить проще)) Вроде уже накопал из исходников драйвера для с#, что это надо делать в случае, если тип стейтмента isc_info_sql_stmt_select, isc_info_sql_stmt_select_for_upd или isc_info_sql_stmt_exec_procedure ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 01:14 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
Пытаюсь понять что из себя представляет тип SQL_D_FLOAT, и если это тот же самый SQL_DOUBLE, то чем он от него отличается, что для него пришлось отдельный тип делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2022, 11:20 |
|
Асинхронное API для клиента
|
|||
---|---|---|---|
#18+
ArtDen Пытаюсь понять что из себя представляет тип SQL_D_FLOAT, и если это тот же самый SQL_DOUBLE, то чем он от него отличается, что для него пришлось отдельный тип делать? Сейчас ты его нигде реально не найдёшь, нет его. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2022, 11:29 |
|
|
Start [/forum/topic.php?fid=40&tid=1559814&all=1]: |
0ms |
get settings: |
1ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
30ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
40ms |
update_topic_read_status (1559814): 23.02.2022 11:29:07: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
18ms |
check new: |
1ms |
others: | 110ms |
total: | 214ms |
0 / 0 |