我们这个教程想要解决的目标是:使用 SignalR 来建立一个消息广播系统例子,其可以让一个指定的组实时接收到外部应用发来的提醒。
一个现实世界的应用:一种完美的情况是,一个单一的代码源可以服务于多个客户或领域。例如:http://twitter.com/{用户名},在这个网站里,以用户名为参数,定制到包含这个用户的信息的网页中。简一的代码,但多域。
本目标只是为了基于一个组或一个唯一 ID 去提醒(发送消息)。其次,使用一个外部的应用程序来实现这个目的,例如用一个Windows 服务来建立广播消息到组。
设计:基于三个类的简单消息体系
首先设计将用于服务器端的基本类型。我的意思是服务器端在这种情况下,运用在/ Web应用程序或项目。在此示例代码中,我将在Visual Studio 2010构建一个网站项目。
很简单的容器或基本数据单元,代表一个实际的信息
在Messenger类的,我们有一个创建了一个实例管理器,这将是动态生成的请求(使用懒加载)
其次,方法 GetAllMessages 将被用来获取所有被包含在 ConcurrentDictionary 里的消息。你可以根据你的需求(如取特定的组的消息等)来更好地获取消息。
第三,BroadCastMessage 方法将把消息发给一个特定组里的每一个成员。这些成员根据组参数获得。
以下是获得成员的方法 GetClients:
这将基于 MessengerHub 来返回指定组的成员。然后使用上面的 BroadCastmessage 方法,把提醒消息用“add” 方法来发给组里的每个成员。
3. MessengerHub
我们添加了 AddToGroup,GetAllMessages,BroadCastMessage 方法到这个类中,这个类实现了消息管理的功能,也提供了远程外部接口,可以通过 x.x.x.x/signalr/hubs 来调用。
这个客户端代码是基于所有 SignalR 的启动,请注意我前面建立的 WebSite 项目,前面的三个类需要增加到 "App_Code" 里。
上面的代码是相对简单的。jGrowl 被用在消息提醒系统中,或者在浏览器上弹出消息。
代码中的 ("sourcing") 组名可以根据你的需要来修改。
上面的控制台应用程序基本上是外部应用程序和对SignalR的远程调用。它会创建一个代理沟通到远程站点。
结果是:
上面的程序访问地址是 http://localhost:9616/signalr。也可以通过后面的地址检查测试你的 SignalR 在服务器端是否正常运行:http://localhost:9616/signalr/hubs。你会看到一个扩展应用,里面显示出这个应用暴露的所有的方法。
以上的两个例子应该能让你开始开发你自己的应用了。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务