我将使用SignalR和Redis设置具有故障转移环境的横向扩展。第一步是确保Redis处理SignalR节点之间的通信(当前问题)。接下来将连接Redis Sentinel和BookSleeve,以便SignalR节点访问单个Redis端点。
@mirajavora在他的文章Scaling SignalR with Redis中解释了如何设置单个实例Redis环境。
为了测试(即使这最终会驻留在* nix框中),我在Windows上设置了Redis。服务器启动,我配置SignalR应用程序以使用Redis消息总线。
我通过在没有运行Redis的情况下运行应用程序来验证SignalR应用程序正在使用Redis。我得到一个预期的错误,表明:
无法建立连接,因为目标计算机是主动的 拒绝它127.0.0.1:6379
然后我启动Redis并回收SignalR应用程序池。
使用以下网址,我确认SignalR应用正在与Redis通信:
newsfeedlocal1:8082 / signalr运输= longPolling&安培;的ConnectionId = 7285d6e5-412c-4bca-9897-5f9ab1ebcece&安培; connectionData =%5B%7B%22name%22%3A%22newsfeedhub%22%7D%5D&安培; MESSAGEID = B% 2C0%7CF%2C2%7CG%2C0%7CH%2C0&安培; TID = 5&安培;回调= jQuery17204961678246036172_1357588747275&安培; _ = 1357588762433
Redis状态:
到目前为止一直很好......应用程序按预期运行。
在他的文章末尾,Mira在Global.asax中有以下行,我在其他文档中没有看到:
RouteTable.Routes.MapConnection( “回声”, “回声/ {*}操作”);
我的SignalR项目中没有DistributedConnection对象,并将其遗漏(因为我在GitHub Documentation中没有看到它。对此行的任何进一步解释?
Mira的文章建议增加最大工作进程数以在本地进行测试。将此值设置为1以外的任何数字都会破坏节点之间的通信。客户端1执行一些将通知连接的客户端2的操作 - 窗口1在窗口2上向客户端2发送通知。
我确实看到了多个工作进程,但我不认为这是一个很好的测试场景。我有Fiddler打开,但不知道该寻找什么来进一步调试此问题。像这样的测试是否真的能够正确模拟多个SignalR节点?
目前我在没有负载均衡器的情况下进行测试。有没有推荐的软件负载均衡器?