向用户发送与Facebook相同的关于新事件的通知's使用SignalR的通知
Sending Notification to the users about the new events same as Facebook's notifications using SignalR
正如您在Facebook的通知系统中看到的,当与您的活动相关的指定更改发生时,Facebook会通知您。重要的问题是,如果我们想使用SignalR发送通知,我们有两个选择:
- 使用客户端调用服务器方法给客户端的消息
- 在中使用服务器端启动连接并调用方法向客户端广播消息的服务器端,如下所示:
[HubName("messenger")] public class MessengerHub : Hub { /// <summary> /// Broads the cast message. /// </summary> /// <param name="message">The message.</param> public void BroadCastMessage(Object message, string group) { _messenger.BroadCastMessage(message, group); } }
在这里,我们从服务器调用BroadCastMessage方法来通知用户:
var connection = new HubConnection("http://localhost:21600/"); SignalRConsole.SignalR.MessengerHub.Message message = new SignalR.MessengerHub.Message(); message.Content = Console.ReadLine(); message.Duration = 500; var myHub = connection.CreateProxy("messenger"); connection.Start().Wait(); myHub.Invoke("broadCastMessage", myData); Console.ReadLine();
现在,如果我们想将消息广播为基于数据库中上次更改的用户通知,我们应该经常检查数据库,然后启动连接以调用广播方法向用户发送通知。然后,我知道这种连续检查的方法是使用无限while循环,如下所示:
> while (true){
> //Some codes for tracing the last changes in Database such as new related events
> if(CheckIfThereIsaNewEvent()){
> connection.Start().Wait();
> myHub.Invoke("broadCastMessage", myData);
}
> }
当我们有一亿用户时,这种编码风格应该很糟糕,因为服务器应该不断调用一个方法,检查数据库中的新事件,并向大量客户端广播消息,因此我们应该在服务器上分配巨大的计算量,从而分配巨大的负载,这是不合乎逻辑的。那么,真正的方法是什么呢?Facebook对此问题的解决方案是什么?
在这里,我们可以在数据库更新时触发消息广播。例如,我们有下面的方法和数据库更新方法
[HubName("messenger")]
public class MessengerHub : Hub
{
/// <summary>
/// Broads the db update message.
/// </summary>
/// <param name="message">The message.</param>
public void BroadCastDbUpdate(Bool IsDbUpdate, string changes)
{
_messenger.BroadCastMessage(IsDbUpdate, changes);
}
}
public void DbUpdate()
{
//Do your db update and call the broadcast method
_messenger.BroadCastMessage(IsDbUpdate, changes);
}
尝试使用SqlDependency类OnChange Event来激发SignalR方法。您可以指定应在哪个查询上激发事件:)
相关文章:
- 通知全局事件组件的最佳方式
- 如何在jQuery中为通知添加事件onClick
- 当侦听器已附加到 Backbone.Model 事件时获得通知
- 如何通知鼠标事件从 Java 脚本到 Cocoa
- Vaadin窗口中的关闭通知事件
- webview javascript事件通知
- Jquery通知事件触发两次
- 向用户发送与Facebook相同的关于新事件的通知's使用SignalR的通知
- 通知来自XPcom的外部事件的JavaScript
- 当窗口最小化时,提醒用户浏览器内事件——而不是html5通知
- 如何通知客户端's浏览器关于服务器上的一些事件
- 无法加载数据URL为chrome浏览器的GCM推送通知'notificationclick'事件
- 向客人发送新日历事件通知时出现问题——谷歌应用程序
- 制作没有间隔时间的通知器(带有事件)
- 可以一个jQuery ajaxSuccess函数通知在另一个(javascript)文件的AJAX事件?如果是这样,我做
- 主干事件聚合器-当所有事件处理程序完成处理时通知
- 推送通知.应用简历事件处理程序(钛)
- 带有推送事件数据的推送通知
- Web通知的事件侦听器
- 我怎样才能收到通知/事件,当mediaStreamTrack.修改为“启用”