Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Кодило
 Аватар для r0fL
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685

Модель передачи данных

08.09.2011, 01:41. Показов 1504. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В данный момент работаю над одним проектом, в который включает в себя клиент, сервер и сервер базы данных. Сервер и сервер базы данных находятся на выделенной машине в интернете, клиент работает с ними по интернету. В данный момент передача у меня осуществляется способом "клиент отправил запрос - обязательно получил ответ", но столкнулся с такой проблемой, что между тем, как сервер получил запрос и отправил ответ еще имеется время на выполнение запроса - работа с базой данных, все это тратит время, +ко всему готовый ответ, который часто включает в себя какой-то массив данных, который надо передать клиенту, что не всегда происходит мгновенно, но дело не в этом, дело в том, что такая модель исключает многопоточность на стороне клиента, а точнее её сильно ограничивает.

Так как передача ведется сериализацией, клиент обязан получить ответ, иначе сервер не сможет принять следующий запрос, но если клиент прервал поток и ответ не получил, сериализация ответа на сервере будет ждать, пока клиент не десериализует этот ответ. Пример: человек захотел сгенерировать отчет за какой-либо период, допустим, за год - пока клиент загружает данные пользователь передумал генерировать отчет и завершил поток получения данных, не дождавшись\недополучив ответ от сервера, сервер будет пытаться передать этот ответ в данной модели, пока не передаст\подключение не завершится, то есть, если пользователь завершил поток, работа в программе перестает быть доступной до переподключения. Так же возникает проблема загрузки некоторых данных в несколько потоков, а не в один, то есть клиент может отправить и получить ответ только единожды за единицу времени, что тоже очень неудобно, ведь если пользователь отправит 2 запроса, а они асинхронны, то клиент может получить первым ответ на второй запрос и вторым - на первый, посему складывается вопрос, как можно реализовать лучшим способом передачу данных так, чтобы она была менее ограничена приведенными выше рамками?

Данные передаваемые между клиентом и сервером самые разные - объекты самописных классов, коллекции этих объектов и т.п.

Надеюсь, объяснил понятно, хоть и получилось слишком много букв, если что-то надо, с радостью могу уточнить, заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2011, 01:41
Ответы с готовыми решениями:

Формат передачи данных
Ребята, у меня маленькая проблема Я на конференции слышал о том что один "тип" из зала, говорил о каком-то формате в который...

Вопрос относительно передачи данных
Я прочитал тему о пяти самых популярных вопросах... и делаю в точности, как указано в выше указанной теме, но выдается ошибка... В связи...

Протокол передачи данных через последовательный порт
Ребят, всем добрый вечер! Предстоит следующая задача: нужно реализовать, например - в отдельном классе, функции для передачи данных через...

2
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.09.2011, 10:10
r0fL, теоритически это делается так: создается клиент-серверное приложение на сокетах (обеспечивает многопоточность). Клиентская часть как положено ставится клиенту, серверная на сервер, на котором СУБД расположена. Вот эта серверная часть и работает с БД, а клиенту отправляются уже готовые данные. Таким образом дествия клиента не могут заблокировать работу сервера БД.
Я такого ниразу не делал, но когда-то мне рассказывали именно так.
0
Кодило
 Аватар для r0fL
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685
08.09.2011, 12:55  [ТС]
nio, нет-нет, я тут несколько неправильно выразился, многопоточность на сервере не блокируется, каждый клиент имеет свой поток, но вот на стороне клиента пользователь не может в несколько потоков посылать запросы серверу, в этом проблема. Я вот сейчас думаю сделать какой-то стек запросов на стороне клиента, в который будут собираться ответы, запросам и ответам в свою очередь присваивать какой-либо идентификатор, чтобы определять какой ответ пришел на какой запрос, а на стороне сервера выделять на каждый запрос от клиента отдельный поток.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2011, 12:55
Помогаю со студенческими работами здесь

Оптимальный способ передачи данных между программами на c#
Здравствуйте. Ситуация следующая: есть 2 программы, между которыми необходимо обеспечить передачу данных(от одной к другой, в обратную...

Разработать библиотеку процедур для приёма-передачи данных по сети на основе протокола UDP и текст для её проверки
Здравствуйте. Вот задание. Разработать библиотеку процедур для приёма-передачи данных по сети на основе протокола UDP и текст для её...

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

Цепочка передачи данных (Переменные - dataGridView - MSSQL БД)
Доброго времени суток, дорогие друзья! Пытаюсь разобраться в такой проблеме: Разрабатываю программу, её основная функция, это посчитать...

ООП, модель данных и база данных
Начитался я умных книжек, статей и прочего, в результате в голове полный «компот» :D Надеюсь сможете мне растравить все на свои места. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru