我正在研究在Azure(自托管工作者)中托管的.NET中构建一些signalR应用程序。
我想使用Azure Redis扩展并设置背板,但是当我开始设置新的Redis缓存时,我对“最多X连接”的内容感到困惑。实际上意味着。
例如,CO基本250MB缓存'有'最多256个连接'和#C1标准1GB缓存'有'最多1,000个连接'
要确认,我可以采取最多256个连接'意味着我可以(理论上)有多达256个工作线程同时推送SignalR消息...或者这是否意味着我的网站连接到我的SignalR的连接(用户)的总量,反过来,在Redis缓存周围推送消息?
显然,如果它意味着256名员工那么好 - 但如果它意味着我网站上不同连接的总数,那么这就是交易破坏者
如果这是一个愚蠢的问题,感谢和抱歉!
答案 0 :(得分:2)
从SignalR背板的角度来看,SignalR websocket连接与Redis缓存服务器的连接数量无关。
用户的SignalR连接与SignalR Hub服务器连接,而SignalR Hub服务器则在横向扩展的情况下充当Redis客户端。 信号器中的Redis客户端使用标准ConnectionMultiplexer进行连接,该处理器内部处理与redis的连接。并且指导是为整个应用程序使用单个多路复用器,或者使用最小数量。
Redis客户端将发送/接收消息,而不是为每个操作创建/访问密钥,因此打开单个通道并在该单个通道上交换所有消息是有意义的。
我不确定connectionmultiplexer如何管理Redis连接,但我们确实使用Redis背板在Azure上为我们的应用程序进行SignalR scaleout。
我们加载测试应用程序和大约20万个始终有效的Signalr websocket连接扩展到10台服务器,Azure Redis缓存连接数平均徘徊在50左右,几乎从未超过60。
我认为可以肯定地说,Azure Redis缓存上的连接限制不是SignalR的限制因素,除非您扩展到数百台服务器。
答案 1 :(得分:-1)
连接限制与请求读取或写入Redis的工作线程数无关。它是关于物理TCP连接。 Redis支持pipelining。许多客户端库都是线程安全的,因此您可以使用相同的物理连接对象同时从多个线程写入。