Текущий архив: 2003.02.17;
Скачать: CL | DM;
ВнизMIDAS сервер на TRemouteDataModule. Как передать сооб-е клиентам? Найти похожие ветки
← →
maxi (2003-02-10 08:44) [0]Такая проблема : Построил MIDAS сервер на TRemouteDataModule. На клиенте использую TSocketConnection (сервер построен на основе программы scktsrvr). Однако как передать сообщение от сервера к клиентам ?????
Пробовал такой вариант : на клиенте ставлю Automation Object (объект автоматизации), при запуске клиента создаю копию объекта через CoMyAutomationObject, беря тем самым его интерфейс IMyAutomationObject. Этот интерфейс передаю в качестве параметра (IUnknown или IDispatch) в интерфейс сервера. Тот его получает и вроде бы всё нормально, но при первом же вызове методов из интерфейса клиента возникает "Разрушительный сбой" и сервер заваливается.
Как сделать так что бы всё работало верно ???? или подскажите, что у меня неверно .... Буду очень признателен.
← →
Digitman (2003-02-10 08:55) [1]BSS не "умеет" выполнять асинхронные обратные вызовы клиента.
Без серьезной переделки BSS никак не обойтись
← →
А2 (2003-02-10 09:28) [2]Это можно сделать, посмотрите журнал RSDN #2"2002 или на их сайте www.rdsn.ru, статья "Обратные вызовы в MIDAS через TSocketConnection". Там очень подробно описано.
← →
Klim Samgin (2003-02-10 09:48) [3]Что-то ссылка www.rdsn.ru не работает. Не ошибся ли ты, A2?
← →
yn (2003-02-10 09:58) [4]wer
← →
Digitman (2003-02-10 10:43) [5]www.rsdn.ru
RSDN = Russian Software Developer"s Network... вроде бы так)
все там замечательно, только ни о какой асинхронности обр.вызовов речи не идет
иными словами, если клиент находится в состоянии ожидания результата прямого вызова (например, вызов, в контексте которого на серв.стороне выполняется длительный запрос к СУБД), то до момента получения результата ни на какие события, связанные с обр.вызовом, клиент реагировать не имеет возможности, ибо обработка транспортных событий реализована последовательно
← →
Соловьев (2003-02-10 10:47) [6]С делал обмен между сервером и клиентом. Тоже намучался с "Разрушительным сбоем". Опиши конкретно что ты хочешь, а то я что-то не понял :)
← →
Romkin (2003-02-10 11:03) [7]2Digitman
Ну понятно - хочешь асинхронности - реализуй поток на клиенте, а то что получается? ждем одно, получаем другое..
Достаточно организовать поток, и в нем соединение - все будет асинхронно.
2Соловьев: "Разрушительный сбой" чаще всего возникает из-за передачи интерфейсов между потоками без маршалинга, что недопустимо.
← →
Digitman (2003-02-10 11:10) [8]
> Romkin
Да есть там транспортный поток-то ) ... см. TTransportThread
Только толку-то от него(... тр.события этот поток все равно синхронизирует с осн.потоком... так что без переделки TSocketConnection тоже не обойтись
← →
Romkin (2003-02-10 11:22) [9]Поток есть... Переписывать, потом отлаживать, да еще и мультипоточность...
Все там правильно сделано - клиент как правило на одном потоке, и нафиг мне не нать ответ от сервера в другом потоке...
Я ж говорю - напиши на клиенте поток, в котором и соединяйся с сервером для асинхронных обратных вызовов. Быстро и сердито.
← →
Digitman (2003-02-10 11:34) [10]
> напиши на клиенте поток, в котором и соединяйся с сервером
> для асинхронных обратных вызовов
Может быть, в каких-то случаях это и оправдано ... но в общем случае выигрыш в упрощении таким способом транспортной логики сводится к проигрышу в использовании доп.сет.ресурсов из-за необходимости создания отдельной вирт.петли коннекта с партнером
← →
Romkin (2003-02-10 12:02) [11]Бррр... Последнее вообще не понял :-))
← →
Digitman (2003-02-10 12:06) [12]
> Romkin
чего не понял ? )
> в котором и соединяйся с сервером
читай :
отдельный экз-р TSocketConnection = отдельный экз-р TClientSocket = отдельное гнездо и т.д.
← →
Romkin (2003-02-10 12:15) [13]Добавь еще - отдельный экземпляр rdm на сервере :-))
Меня это никогда не тревожило, главное - простота и логика работы...
← →
Digitman (2003-02-10 12:24) [14]
> Добавь еще - отдельный экземпляр rdm на сервере :-))
разумеется - добавлю)... экз-ры маршаллеров-то - разные для каждого коннекта)
← →
Klim Samgin (2003-02-10 13:05) [15]А в Delphi 7 эту тему пробивал кто-нибудь?
← →
MrZeRo (2003-02-10 13:43) [16]А поискать в инете решение слабо?
Dan Miser подробно описал решение данной проблемы.
http://www.google.com/search?hl=ru&ie=windows-1251&q=MIDAS+CALLBACK
Страницы: 1 вся ветка
Текущий архив: 2003.02.17;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.008 c