DF
Dis Fiction8 марта 2022 г. 7:21
Общий вопрос по клиент-серверному приложению с MYSQL
Всем доброго дня, в учебных целях пишу на С++ клиент-серверное приложение, с использованием MYSQL.
На данном этапе есть решение с 2 проектами клиента и сервера, работает обмен сообщениями между ними.
Вопрос - правильно ли я понимаю что делать дальше, нужно в проекте сервера создать взаимодействие с локальной БД, а со стороны клиента "сообщениями" отправлять SQL-запросы на сервер? Или всё делается как-то иначе?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Сейчас обсуждают на форуме
добавить qlineseries в функции PMID 35774217 Free PMC article priligy cvs
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderChe31 октября 2024 г. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3 октября 2024 г. 4:05
Отправлять от клиента сообщения с SQL запросами? Как то странно или я не понял.
А так то нужен протокол для обмена данными между сервером и клиентом.
1) К примеру модифицированный SRT
struct Packet {
bool mode; // тип пакета: управляющий = 1 . данные = 0
uint16_t controlType; // команда
uint16_t subType;
uint32_t typeInfo;
uint32_t timeStamp;
uint32_t destSocket;
QByteArray data; // сообщение
};
В QByteArray data пакуй любой тип данных (QDataStream) и на сервере распаковывай. А на основе полученных данных делай SQL запрос.
2) А можно в json паковать. Еще правильней хоть и менее производительней.
p.s Пример бинарного протокола выше это актуально для высокопроизводительных UDP серверов.
Хотя для highload QByteArray через QDataStream медленно работает. Там нужно извращаться с memcpy и тд.
Я делаю без Qt в этот раз, на чистых плюсах с использованием сокетов. На данном этапе я пока что могу запустить проекты клиента и сервера, в консоли писать сообщение к примеру от клиента, и оно отобразится на сервере, т.е. обычный чат в консоли. Сообщения в формате char[].
Я хотел бы понять, как устроено клиент-серверное приложение с базой данных, это мой первый такой проект, так что заранее извиняюсь за возможно глупые вопросы. Просто не хочу сделать непойми что.
Как я это себе представляю - от клиента приходит сообщение с запросом серверу, в проекте сервера происходит подключение к локальной базе данных:
далее некий запрос:
И далее результат запроса возвращается клиенту.
В правильном ли направлении я вообще двигаюсь? И вообще правильно ли связывать клиент-серверное приложение и базу данных таким образом, или всё должно выглядеть вообще иначе, а вот так никто не делает?
Упаковывай запрос клиента в json и распаковывай на сервере.
Для упаковки найди библиотеку сериализации в json.
Хотя конечно можно string/char (sql команда) с запросом от клиента отправлять на сервер.
Это самое простое и само собой напрашивающееся. Хотя это как то бестолково на мой взгляд.
Тебе в любом случае нужен протокол обмена данных между сервером и клиентом.
И соответственные обработчики на обоих сторонах. Ищи варианты как использовать json.
Смог подключить json к visual studio, но send() принимает только поток байтов, по умолчанию для передачи запроса через send() использовалось const char*, для передачи объекта действительно нужно использовать сериализацию.
Правильно ли я понимаю, что суть всех этих манипуляций в том, что-бы передавать серверу четко структурированный запрос из ключей и значений, дальше сервер из значений сам составляет запрос к БД, и поэтому Вы сказали, что передавать запрос просто строкой бестолково?
Дв, именно так.
Если бы все обошлось только запросами в базе то в теории можно было бы и запрос sql строку посылать.
Но так не делают по причине того что наверняка появится нужда каких либо действий на стороне сервера\клиента не связанных с базой. И тогда строка уже не SQL запрос содержит а команду на исполнение. А как сервер определит что эту строку нужно не как запрос в базу посылать а отдельно обработать?
Спасибо за помощь, вроде всё +- получилось. Пока выглядит так - с помощью сериализации перевожу json в строку и передаю серверу, там обратно собираю в json, пока в учебных целях у json-объекта 2 поля - тип команды (команда серверу/запрос к БД), и сама команда. Далее получаю из БД результирующую таблицу, и возвращаю клиенту построчно. Это похоже на правду?
Да, в целом правильно.