Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Сообщение от севера клиенту.  [new]
Basketbol
Member

Откуда:
Сообщений: 40
Доброго дня всем!
Вопрос: в сетевом программировании можно ли послать инфу от сервера клиенту, без запроса клиента?
Использую библиотеку RTC.
Там везде в примерах указаны схемы с функциями на сервере, которые вызываются клиентом.
Т.е. клиент шлет какой то запрос - сервер отвечает.

У меня будет приложение где возможно будет множество клиентов, каждый из которых будет слать некий запрос серверу раз в секунду.
Но далеко не всегда будет возвращаться ответ. И возможно что зачастую ответ будет равен предыдущему ответу.
Для оптимизации процесса я задумался над сабжем.
Т.е. у сервера есть инфа о том, какие данные нужны клиенту. И он может их посылать только тогда, когда они изменились. Т.е. не обязательно ждать запроса от клиента.
Но как послать, когда от клиента нет запроса?
9 авг 19, 23:12    [21945986]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
2 варианта
1) Держать соединение между сервером и клиентами постоянно открытым. Тогда сервер знает обо всех подключенных клиентах и может им слать что угодно, когда угодно.
2) Клиенты регистрируют на сервере свои IP и порты по которым они будут работать как серверы. И сервер по факту превращается в клиента, который подключается по зарегистрированным IP и портам и отправляет им что угодно.
9 авг 19, 23:53    [21945990]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Есть 3 вариант... более гибкий..
1) Разворачиваем брокер (кафка/раббит/самописное нечто)
2) регистрируем там столько тем/каналов сколько будет сообщений (событий) от сервера
3) Клиенты подписываются у брокера на темы
4) Сервер по событиям шлет в брокер в соответствующие темы инфу.

Гибкость в том, что ни сервер ни клиент не знают друг о друге. При этом сервер можно горизонтально масштабировать.
9 авг 19, 23:57    [21945991]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3961
Basketbol
как послать, когда от клиента нет запроса?
Ровно точно так же, как в случае, если от клиента есть запрос. С помощью send.
10 авг 19, 00:09    [21945997]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
Basketbol
Member

Откуда:
Сообщений: 40
Спасибо за ответы.

YuRock
Ровно точно так же, как в случае, если от клиента есть запрос. С помощью send.


В контексте использования библиотеки RTC - (насколько я понял философию автора) - мы можем только отвечать в контексте запроса от клиента. Во многих ответах на вопросы на своем форуме автор библиотеки регулярно просит воздерживаться от хранения соединений где то в глобальных переменных. Косвенно на такую философию указывает тот факт что там есть server.connectionCount, но нет sever.connections, и мы можем посылать инфу только в контексте запроса от клиента:
procedure TDataServer.RtcFunctionExecute(Sender: TRtcConnection;
  Param: TRtcFunctionInfo; Result: TRtcValue);
begin
  result.asString := 'myAnswer';
end;
10 авг 19, 07:59    [21946037]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3961
Basketbol
В контексте использования библиотеки RTC - (насколько я понял философию автора) - мы можем только отвечать в контексте запроса от клиента.
Я не в курсе, что это за библиотека, и какие причины заставляют её использовать.
Я такими библиотеками не пользуюсь и написал в общем случае.

А вопрос в теме вообще странно звучал.
Довольно штатная ситуация, когда клиент коннестится [, проходит аутентификацию,] и начинает бесконечно получать эхо от сервера (состояние какое-то) без каких либо запросов.
10 авг 19, 12:21    [21946074]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
vkorshun
Member

Откуда:
Сообщений: 51
Ответ на похожий вопрос от автора RTC - [url=]https://rtc.teppi.net/sdkarchive/index42454245.html?cmd=viewtopic&topic_id=207§ion_id=9&sid=[/url]

Ну и еще наверно можно использовать websocket соединение. RTC так же поддерживает.
12 авг 19, 14:16    [21947179]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение от севера клиенту.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

Или выкинуть напрочь это RTC и использовать BSD Sockets с которыми всё просто и понятно.

Posted via ActualForum NNTP Server 1.5

12 авг 19, 15:05    [21947227]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить