Соединение обратного вызова клиентов Datasnap KeepAlive не работает

Я следовал руководству в Delphi Labs: Datasnap XE - обратные вызовы, кажется, что обратные вызовы работают хорошо. Тем не менее, если клиентские стороны простаивают более часа, кажется, что обратные вызовы клиентов перестают работать. Я поменял сервер DSTCPServerTransport.KeepAliveEnabled, .KeepAliveInterval, .KeepAliveTime - но это никак не помогло.

Кто-нибудь знает, как я могу держать клиентов подключенными сверхурочно?

1: https://edn.embarcadero.com/article/41374

1 ответ

Я также использую обратные вызовы Datasnap в нескольких приложениях. Мое решение состояло в том, чтобы установить таймер, который измеряет, сколько времени занимает конкретное сообщение (например, "* ping"), которое было отправлено с использованием BroadCastToChannel быть принятым зарегистрированным обратным вызовом по тому же каналу в том же приложении. Я разрешаю 5 секунд в мобильном приложении, и если эхо моего пинга в это время не получено, я предполагаю, что мой обратный вызов больше не работает. Я делаю то, что я называю "рециркуляция обратного вызова". То есть я отменяю регистрацию предыдущего обратного вызова (не вызывает ошибок в случае сбоя) и регистрирую новый (мои идентификаторы обратного вызова основаны на отметке времени, поэтому все они уникальны). Мой "таймер пинга" работает с интервалами в 1 минуту, что часто достаточно для моих приложений. Это решение было бы большим количеством кода для представления здесь, поэтому я надеюсь, что мое описание поможет вам найти решение, которое работает для вас. Задавайте вопросы, если вы не уверены.

Другие вопросы по тегам