Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-52978
Артём К
2003-02-10 12:03
2003.02.17
Метод OnSelect для ListBox


6-53141
TS
2002-12-26 08:50
2003.02.17
TWebBrowser не копирует в буфер обмена выделенный фрагмент


1-52821
MikeFW
2003-02-07 11:22
2003.02.17
Размещение файлового образа чужего EXE-файла в моем EXE-файле?


1-52981
Xok
2003-02-10 12:14
2003.02.17
Как DateTimePicker у присвоить пустое значение?


1-53026
ShowDeath555
2003-02-10 19:17
2003.02.17
Где можно достать документацию по OpenGL?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский