私のアプリにはたくさんの UserGroups があります。
これらのユーザー グループの 1 つまたは多数に通知を送信できる管理ページがあります。
WebAPIメソッドへのAJAX呼び出しを介してデータベースに保存された後、管理者が通知を投稿できるハブがあります。これが Ajax 成功セクションに返されたら、サーバー ハブでメソッドを呼び出して、リアルタイムで 1 つ以上のグループに通知を送信します。グループは、int を .ToString() で変換するだけでグループ名を作成する int の配列で示されます。
クライアントのホームページには、通知を表示するウィジェットがあります。一部のユーザーは複数の userGroup の一部になることができますが、ページの上部に、現在表示している UserGroupd を指定するドロップダウン リストがあります。したがって、それらは多くの UserGroups の一部である可能性がありますが、一度に表示できるのは 1 つだけです。
したがって、私は Jabbr Chatrooms のようにやっていると思いますが、アプリの意図が異なるため、あまり設定したくありません。そのため、クライアントがログインすると、ドロップダウンリストの Selected 項目の値に基づいてグループに参加します。クライアントとしてページを更新するたびに、「Join」サーバー メソッドが新しい connectionId で再度呼び出されることに気付きました。これは正しいですか?実際よりも多くの接続を持ちたくありません。また、クライアントがドロップダウンリストを変更したときに、クライアントをグループから切断し、新しいグループに再参加させる必要があります。
デモを探していますが、非常に簡単なデモまたは非常に洗練されたデモを見つけました。サイトには SignalR 機能を追加する予定の他の領域があるため、オブジェクトをロックダウンしたくないため、最初はその中間を目指しています。モデルしすぎ。
だから私のハブで私は得た:
public void Join(string groupName) {
Groups.Add(Context.ConnectionId, groupName);
}
public void SendNotificationsToGroups(string title, string description, int[] groups) {
foreach (int i in groups) {
Clients.OthersInGroup(i.ToString()).addMessage(Title, description);
}
}
管理ページは SendNotificationsToGroups を呼び出し、これは正常に機能します。ご覧のとおり、通知をブロードキャストするグループである int の配列を渡します。GroupNames を作成するために int を .ToString するだけです。
クライアントは次のことを行います。
var Hub = $.connection.myHub;
Hub.client.addMessage = function (title, description) {
$('#Notification').find('tr:first').before('<tr><td>'+title+description'</td></tr>');
}
$.connection.hub.start().done(function () {
var groupId = $('#userGroupID').val();
newsHub.server.join(groupId);
}
私の主な関心事は、 addMessage 部分が機能するため、 join メソッドです!! 管理者が通知を送信し、クライアントがそれらを確認します。問題は、クライアントがブラウザを更新した場合、サーバーで Join が再度呼び出され (ブレークポイントが設定されています)、新しい Context.ConnectionId が含まれていることです。これは悪いですか?これにより、必要以上の接続が発生していますか。ウィンドウが閉じられてクライアントがページを離れた場合に接続を確実にするために行う必要があるjavascript/jQuery呼び出しはありますか?ブラウザの更新の問題はどうですか?
アイデアをありがとう。