使用 AspNet SignalR 连接 Redis

Wiring up Redis with AspNet SignalR

我只是想验证我的设置。这似乎有效,但我想和你们一起验证我的设置。

我在我的网站上托管了 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();
    }
}

现在,我在我的其他 Web 服务中这样使用它:

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 扩展我的网站。

SignalR目前提供了三种背板:Azure Service Bus、Redis和SQLServer,我们可以像您一样使用Redis在部署在多个实例上的SignalR应用程序中分发消息,您的配置是行。本文:SignalR Scaleout with Redis是详细教程,大家可以参考一下。

Is that means SignalR connection timeout is 10 seconds (because KeepAlive is set to 10 seconds)?

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