我是SignalR的新手,所以请原谅我某个愚蠢的问题。
假设我有许多在AWS EC2实例上运行的控制台应用程序(或Windows服务), 我有一个Web服务器(主持MVC3的IIS),当然我有无数的Web客户端......
我如何在这些之间进行交流?我们说
我应该使用什么 - Hub或PersistentConnection?在这种情况下,控制台应用程序也将是客户端或SelfHosts(无论如何,SelfHost是什么?)
是否有任何示例代码,我可以学习如何构建类似的东西? (我相信Nuget和Github以及VideoTutorials上的示例将向您展示如何构建一个服务器/多个Web客户端解决方案,但不是我需要的那样)
答案 0 :(得分:2)
您最好的选择是在IIS上托管SignalR服务器和MVC应用程序。由于您已经设置了IIS,因此不要担心自托管。
我认为你可以更轻松地使用Hubs over PersistentConnections,因为Hubs允许使用RPC。
在您的控制台应用和Windows服务中,我建议使用SignalR .NET客户端。
https://github.com/SignalR/SignalR/wiki/SignalR-Client-Hubs
您可以将数据从控制台应用程序推送到SignalR服务器,然后又可以充当浏览器客户端的代理。当然,SignalR服务器可以在两个方向上进行代理,允许任何客户端向任何其他客户端发送实时消息或请求。
https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs
您的.NET和JS客户端可以访问相同的集线器或不同的集线器。如果所有客户端都访问同一个集线器,您可能希望将它们分成组,以便区分这两种类型的客户端。如果您选择使用多个集线器,您可能希望使用GlobalHost.ConnectionManager.GetHubContext<MyHub>()
与连接到不同集线器的客户端进行通信。
答案 1 :(得分:1)
您需要使用集线器。
以下是如何操作的示例(在0.5.3中):
服务器端(集线器):
public class MyDashboard : Hub
{
/* Have this method called every few seconds via a timer */
public void SendLoad()
{
// Will call the "retrieveLoad" JS method on the clients
Clients.retrieveLoad(new {
CPU = 10.25, // Put something relevant here
Memory = "80%" // Again, put something relevant here
});
}
public double GetDiskSpace()
{
return 3829847; // You'd replace the number with something more relevant
}
}
客户端(javascript):
var dashboard = $.connection.myDashboard;
dashboard.retrieveLoad = function(info) {
console.log("The CPU is at: " + info.CPU);
console.log("The Memory is at: " + info.Memory);
}
$.connection.hub.start(function() {
// This is called once the hub has started, so we need to wire up our click event
$("#myButton").click(function() {
dashboard.getDiskSpace(function(space) {
console.log("The disk space is at: " + space);
});
});
});
希望这有帮助!请随意在我们的JabbR会议室与其他人讨论该框架:http://jabbr.net/#/rooms/signalr
注意:请记住,如果您希望在集线器上保留任何内容(私有/公共变量等),以使该数据保持静态。
答案 2 :(得分:1)
一个问题很多......:)
首先,控制台应用程序/ Windows服务可能只是客户端与浏览器相同的Hub
。完全没有理由下载到PersistentConnection
编程模型。
其次,您将讨论两个不同的用例:
接下来,自我主机意味着在IIS + ASP.NET以外的主机中托管SignalR服务器。例如,您可以在另一个控制台应用程序或Windows服务中启动SignalR服务,而不是在IIS + ASP.NET中托管。您可以在自托管here in the SignalR Wiki上找到合适的文档。
至于SignalR样本,老实说,你所构建的内容没有什么不同,基本文档会告诉你如何做。对于您的控制台应用/ Windows服务,您需要look at the .NET client hub wiki page,对于您的浏览器应用需要look at the browser client wiki page,如果您想在IIS + ASP之外托管您的服务器,则需要look at the self hosting wiki page .NET。