DF
Dis FictionНаурыз 8, 2022, 7:21 Т.Ж.
Общий вопрос по клиент-серверному приложению с MYSQL
Всем доброго дня, в учебных целях пишу на С++ клиент-серверное приложение, с использованием MYSQL.
На данном этапе есть решение с 2 проектами клиента и сервера, работает обмен сообщениями между ними.
Вопрос - правильно ли я понимаю что делать дальше, нужно в проекте сервера создать взаимодействие с локальной БД, а со стороны клиента "сообщениями" отправлять SQL-запросы на сервер? Или всё делается как-то иначе?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 12:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 6:20 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 1:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 1 Т.Ж.
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Отправлять от клиента сообщения с 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 поля - тип команды (команда серверу/запрос к БД), и сама команда. Далее получаю из БД результирующую таблицу, и возвращаю клиенту построчно. Это похоже на правду?
Да, в целом правильно.