使用AspNet SignalR连接Redis

时间:2017-09-29 07:32:18

标签: c# azure redis signalr signalr-backplane

我只想验证我的设置。它似乎有效,但我想与你们一起验证我的设置。

我在我的网站上托管了SignalR。在我的Startup.cs中,我做了:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);  //may be no longer needed because I've set KeepAlive?
        GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
        GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);

        // following setting is get from https://greenfinch.ie/2015/07/09/azure-licks-using-redis-cache-signalr/
        var redisConnection = ConfigurationManager.ConnectionStrings["RedisCache"].ConnectionString;
        // set up SignalR to use Redis, and specify an event key that will be used to identify the application in the cache
        GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(redisConnection, "MyEventKey"));

        app.MapSignalR();
    }
}

现在,我在其他网络服务中使用它:

HubConnection hubConn = new HubConnection(url);
...
...
...
hubConn.CreateHubProxy("NotifyHub").On<string>("Notify", (msg) => PushToQueue(msg));
hubConn.Start();

这似乎是对的吗?这是否意味着SignalR连接超时为10秒(因为KeepAlive设置为10秒)?

这是我的使用图表(想象网站和网络服务器有很多流量,Azure需要为网站和网络服务器启动另一台计算机

                        url: www.blablabla.com                 url: services.anotherweb.com
--------                      -----------                             ---------------
| User |  --> Modify Data --> | Website | --> Trigger Web Service --> | Web Service |
--------                      -----------          |                  ---------------
                                                   |                        ^
                                                   |                        |
                                                   |     --------------------  
                                                   |     |                    
                                                   ------|---------------------
                                                         |                    |
                                                         |                    |
                                                         |                    v
                        url: www.blablabla.com           |     url: services.anotherweb.com
--------                      -----------                |            ---------------
| User |  --> Modify Data --> | Website | --> Trigger Web Service --> | Web Service |
--------                      -----------                             ---------------

抱歉这个愚蠢的问题。刚刚发现了有关redis的信息,并想用SignalR扩展我的网站。

1 个答案:

答案 0 :(得分:2)

SignalR目前提供三个背板:Azure Service Bus,Redis和SQL Server,我们可以使用Redis在部署在多个实例上的SignalR应用程序上分发消息,就像您一样,并且您的配置正常。本文:SignalR Scaleout with Redis是一个详细的教程,您可以参考它。

  

这是否意味着SignalR连接超时为10秒(因为KeepAlive设置为10秒)?

SignalR使用传输API之一:WebSockets,服务器发送事件,永久帧或长轮询来创建传输连接。对于除长轮询之外的所有传输,SignalR客户端使用称为keepalive的函数来检查传输API无法检测的连接丢失,您的配置GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10)表示将每10秒发送一次keepalive数据包。