TCP/IPを使用するDatasnapXEクライアントサーバーアプリケーションがあります。TDSServer.broadcastmessageを使用してクライアントにメッセージをブロードキャストするサーバー何らかの理由でユーザーが利用できなくなった場合、DSServerはOnErrorイベントを発生させます。
OnErrorで、どのユーザーがダウンしているかを判断する方法がわかりませんか?それは可能ですか?
よろしく、キリルハジエフ
XE でこれを判断するための簡単で明白な組み込みの方法はありません。これを実現するために何かを実装することもできますが、必要なほど洗練されていない場合があります。たとえば、接続されているすべてのクライアントに対してサーバーにクエリを実行させ、まだそこにいると応答させることができます。排除のプロセスは、切断されたクライアントにつながります。
主な問題の 1 つは、XE にバグがあり、セッション管理が TCP 接続で機能しないことです。そうしないと、アクティブなセッション (ユーザー/クライアント情報を含む可能性がある) をナビゲートして、欠落しているセッションを確認できる場合があります。
また、XE は TCP Keep-Alive 設定をサポートしていませんでした。これは、TCP 接続が切断された (たとえば、ネットワーク ケーブルが抜かれた) 状況で役立ちますが、開いた状態のままです。Keep-Alive がないと、クライアントに何かを書き込もうとしたときにクライアントがいなくなったことしかわかりません。
RAD Studio/DataSnap の将来のリリースでは、これを簡単に実現するために必要な機能が利用できるようになるかもしれません。
マット