Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

TSimpeObjectBroker - как переключить клиента на другой сервер?   Найти похожие ветки 

 
tytus   (2007-11-14 11:35) [0]

Доброго дня всем.
Ситуация следующая. Запущено два сервера-приложений на разных компах. Как мне переключить клиента с одного сервера на другой?
Реализован callback для отправки клиенту сообщений с сервера. Вот допустим посылаю клиенту сообщение с именем сервера (имя компа в сети) и клиент должен отключиться от текущего сервера-приложений и законнектиццо на другом компе. Использую TSockectConnection + TSimpleObjectBroker.
В списке серверов брокера всего два итема (пока что...)
Как правильно отключать сервера в брокере.
Servers[i].Enabled:=false - не помогает.


 
Сергей М. ©   (2007-11-14 11:50) [1]


> не помогает


Чему не помогает ? Отключению или подключению клиента ?
И что вообще значит "не помогает" ?


 
tytus   (2007-11-14 13:24) [2]

>Сергей М. ©   (14.11.07 11:50) [1]
делаю так.
В обработчике сообщений от сервера (на клиенте) пишу:
Вначале отключаю клиента.
Connect1.Close;//Connect1 - TSocketConnection SOB1 - TSimpleObjectBroker
Затем в брокере делаю недоступными все Servers  кроме того, свойство ComputerName которого совпадает ст принятым в сообщении
with SOB1 do
for i:=0 to Servers.Count-1 do
 begin
   if UpperCase(Servers[i].ComputerName)<>ApperCase(ServerMessage)then
     Servers[i].Enabled:=false
   else
     Servers[i].Enabled:=true;
 end;
Вот и все. //ServerMessage - строка от сервера
Затем заново подключаюсь
Connect1.Open;
и ловлю "No Servers available" , хотя сервера запущены...
Ежели в DesignTime отключать сервера по одному - то все работает...


 
Сергей М. ©   (2007-11-14 13:32) [3]


> В обработчике сообщений от сервера .. отключаю клиента


Такая логика, мягко говоря, не есть гут.

В колбэке посылай асинхронно предопределенное сообщение осн.потоку, при обработке которого собссно и выполняй дисконнект/реконнект и прочие манипуляции с брокером.


 
tytus   (2007-11-14 13:43) [4]

>Сергей М. ©   (14.11.07 13:32) [3]
если я правильно понял - то так и делаю.
вот фрагмент модуля колбека:
const
 CLIENT_MESSAGE=WM_USER+144;

procedure TClientCallBack.ClSend(const AMessage: WideString);
var
 s:WideString;
begin
s:=AMessage;
PostMessage(MainFm.Handle,CLIENT_MESSAGE,WParam(PChar(s)),0);
end;
где MainForm - собственно главная форма .
а вот что в самой главной форме:
const
 CLIENT_MESSAGE=WM_USER+144;
private
procedure CLIENTMESSAGE(var Message:TMessage);message CLIENT_MESSAGE;
затем в implementattion пишу:
procedure TMainFm.CLIENTMESSAGE(var Message:TMessage);
...
begin
SrvClientMessage:=WideString(Message.WParam);
ну а далее Вы знаете....
Получается, что если не делать PostMessage, то сервер подвиснет на время обработки сообщения на клиенте, а так - вроде правильно, и сервер никого не ждет...


 
Сергей М. ©   (2007-11-14 13:46) [5]


> если не делать PostMessage


Кто сказал что не делать ? Делать ! Именно об этом и идет речь !


 
tytus   (2007-11-14 13:59) [6]

>Сергей М. ©   (14.11.07 13:46) [5]
Да так и делаю... мы немного отвлеклись от темы вопроса.
Короче, проведя експеременты, подводя итог, могу сказать след.:
кампанент - TSimpleObjectBroker - для ленивых.
Тоесть - кинул его на форму, прописал сервера - и забыл. В нем даже свойство LoadBalanced ужо установлено в True.
Кстати об сем свойстве. Когда оно тру, то простой Connect1.Open работает на ура. Ежели его установить в фальш, то простым перебором в цикле i:=0 to Servers.Count-1 if not Servers[i].HasFailed ... ничего не добьешся.
Конечно, свое назначение он оправдывает - при подключении соединяется с доступным сервером приложений. А мне нужно с одного сервака переключить клиентов на другой.... короче с брокером не разрулил, и
юзаю простой TStringlist и циклом в блоке try..except..end пытаюсь соединится с доступным сервером, устанавливая принудительно
Connect1.Host:=Serverslist[i]. Вот так.
Исче раз - о брокере - все выше сказанное ИМХО.
Возможно не асилил...


 
Сергей М. ©   (2007-11-14 14:10) [7]


> tytus   (14.11.07 13:59) [6]


Сырой он, TSimpleObjectBroker ..
Он и писался-то Борландом скорее как демо.

Проще не искать там глюки, а сделать своего наследника TCustomObjectBroker, где реализовать требуемую логику самостоятельно.


 
tytus   (2007-11-14 14:27) [8]

>Сергей М. ©   (14.11.07 14:10) [7]
ну вот, мои изыскания и заключения подтвердились.
Спасбо за участие в конференции.
Наследника делать не буду - потому как времени нету, нужно довести до ума трехзвенку...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.055 c
15-1210222532
vajo
2008-05-08 08:55
2008.06.22
Не запускается WinXP на ноутбуке.


2-1212043089
TUserClass
2008-05-29 10:38
2008.06.22
ЗаDisabl ить все формы кроме одной


11-1177247346
bessam
2007-04-22 17:09
2008.06.22
Где, как UpDown прикрутить к текстовому полю


6-1189589788
e_pAhA
2007-09-12 13:36
2008.06.22
Чтение информации с БД интернет сервера


15-1210213823
Slider007
2008-05-08 06:30
2008.06.22
С днем рождения ! 8 мая 2008 четверг





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский