Datasnap:有没有办法在全球范围内检测连接丢失?

时间:2009-02-13 17:43:32

标签: delphi delphi-2009 n-tier-architecture datasnap midas-server

我正在寻找本地连接丢失。有没有意义这样做,就像Corelabs组件上的事件一样?

由于

编辑: 对不起,我将尝试更具体: 我目前正在使用datasnap 2009设计原型。所以我有一个瘦客户端,一个无状态服务器应用程序和一个数据库服务器。

我能做的是检测和处理客户端和服务器应用程序之间的连接丢失(互联网连接)以适当地处理它,即:向用户显示信息性错误消息或检测服务器关闭到在另一个应用服务器上静默重定向。

在我曾经使用ODAC组件管理的2层中,TOraSession有一些事件来处理这个问题。

2 个答案:

答案 0 :(得分:4)

除非针对数据库触发语句,否则通常在连接断开时不会触发事件。这是因为没有办法知道连接丢失,除非存在某种类型的is-alive ping。

许多框架通过对服务器执行非常小的查询来检查连接是否仍然有效。可以从服务器获取时间。特别是在连接池环境中。

您可以在某些数据库事件(beforeexecute?)中的应用程序中实现连接检查功能。或制作一个每10秒检查一次的计时器。

答案 1 :(得分:1)

在客户端上生成一个线程,该线程会定期向服务器发送一些RPC“Ping”或“Heartbeat”命令。

  • 如果失败,客户端知道连接发生了什么

  • 如果服务器在一段时间内没有听到客户端(例如,心跳间隔的两倍),他可以断定客户端已断开连接,但这需要有状态服务器(并且您的设计是无状态的所以它需要在辅助系统中进行事件处理,可以通过消息队列进行处理)