2016-04-20 22 views
2

私はServiceStackのサーバーイベント機能を試していて、一種の "オンラインユーザー"テストアプリケーションを作りたいと思っています。アイデアは、新しいユーザーが参加するたびに、または「ユーザー」のチャンネルに接続する各ユーザーを更新することです。問題は、サブスクリプション/ユーザーが切断/切断されたときを検出する方法を見つけることができないことです。クライアントのServiceStackイベントの切断

答えて

0

ServerEventsClient.OnCommandコールバックは、ユーザーに参加すると、解雇またはアップデートそのServerEventサブスクリプションを残しています。

またでいつでもチャンネルからのすべてのアクティブな加入者のリストを取得することができます

加入者公開情報を含む型なし Dictionary<string,string>のリストを返します
var sseClient = new ServerEventsClient(...); 

var response = sseClient.ServiceClient.Get(new GetEventSubscribers { 
    Channels = sseClient.Channels 
}); 

。私もちょうど、すべてのユーザーを取得するために型指定されたAPIを提供し、今v4.0.57 on MyGetから入手可能ですthis commitGetChannelSubscribers()のための型付きAPIを追加しました

は例えば、ServerEventsClientチャンネルに加入:

var channelSubscribers = sseClient.GetChannelSubscribers(); 
+0

は上が同等のイベントですサーバー側では、私の必要性は、サーバーがバックグラウンドを実行し、クライアントを更新しなければならない古典的なTCP/IPタイプのクライアントサーバーを作成することです(それをやりはじめようとしている人に依存しないでください)。 – Ravenheart

+0

また、サイドノートで、クライアントが不正に切断された場合(アプリケーションを終了すると)、サーバーの登録を解除しても、アクティブなサブスクライバリスト(/ event-subscribers)から長期間削除されません時間(分単位)。 – Ravenheart

+0

@Ravenheartあなたは 'ServerEventsFeature.OnUnsubscribe'にコールバックを登録することができます。クライアントがハートビートの送信を停止し、' ServerEventsFeature.IdleTimeout'(デフォルトは30秒)後に自動的に登録解除されるので、 。 – mythz

関連する問題