Datasnap : Is there a way to detect connection loss globally?

我与影子孤独终老i 提交于 2020-01-22 19:49:22

问题


I'm looking to detect local connection loss. Is there a mean to do that, as with the events on the Corelabs components ?

Thanks

EDIT: Sorry, I'm going to try to be more specific: I'm currently designing a prototype using datasnap 2009. So I've got a thin client, a stateless server app and a database server.

What I would be able to do is to detect and handle connection loss (internet connectivity) between the client and the server app to handle it appropriately, ie: Display an informative error message to the user or to detect a server shutdown to silently redirect on another app server.

In 2-tier I used to manage that with ODAC components, the TOraSession have some events to handle this issues.


回答1:


Normally there is no event fired when a connection is broken, unless a statement is fired against the database. This is because there is no way of knowing a connection loss unless there is some sort of is-alive pinging going on.

Many frameworks check if a connection is still valid by doing a very small query against the server. Could be getting the time from a server. Especially in a connection pooling environment.

You can implement a connection checking function in your application in some of the database events (beforeexecute?). Or make a timer that checks every 10 seconds.




回答2:


Spawn a thread on the client which periodically sends some RPC 'Ping' or 'Heartbeat' commands to the server.

  • if this fails, the client knows that something happened to the connection

  • if the server does not hear the client anymore for some time period (for example, two times the heartbeat interval), he can conclude that the client disconnected, however this requires a stateful server (and your design is stateless so it would require event processing in a secondary system, which could be fed through a message queue)



来源:https://stackoverflow.com/questions/546930/datasnap-is-there-a-way-to-detect-connection-loss-globally

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!