Delphi DataSnapXE BroadcastMessage ошибка - PullRequest
1 голос
/ 25 июля 2011

У меня есть клиент-серверное приложение DatasnapXE, использующее TCP / IP. Сервер транслирует сообщения клиентам, используя TDSServer.broadcastmessage Если случается, что пользователь больше не доступен по какой-либо причине, DSServer вызывает событие OnError.

В OnError я не могу понять, как определить, какой пользователь отключен? Возможно ли это вообще?

С уважением, Кирилл Хаджиев

1 Ответ

1 голос
/ 05 августа 2011

Нет простого / очевидного / встроенного способа определения этого в XE. Вы могли бы реализовать что-то для достижения этой цели, но это может быть не так элегантно, как вы хотите. Например, вы можете запросить у сервера все подключенные клиенты и дать им ответ, что они все еще там. Процесс устранения приведет вас к отключенному клиенту.

Одна из основных проблем заключается в том, что в XE была ошибка, которая не позволяла управлению сессиями работать с TCP-соединениями. В противном случае вы сможете просматривать активные сеансы (которые могут содержать информацию о пользователе / ​​клиенте), чтобы увидеть, какие из них отсутствуют.

Кроме того, XE не поддерживает настройки TCP Keep-Alive, которые полезны в ситуациях, когда соединения TCP разрываются (например, сетевой кабель отключен), но остаются в открытом состоянии. Без Keep-Alive вы знаете, что клиент исчезает, когда вы пытаетесь что-то ему написать.

В следующем выпуске RAD Studio / DataSnap вы можете обнаружить, что функции, которые вы хотите легко выполнить, доступны.

Mat

...