Exemple #1
0
        public void FarmDisconnectOnlyRaisesEventOnce()
        {
            // Each node shares the same bus but are indepenent servers
            var counters  = new SignalR.Infrastructure.PerformanceCounterManager();
            var bus       = new MessageBus(new TraceManager(), counters);
            var nodeCount = 3;
            var nodes     = new List <ServerNode>();

            for (int i = 0; i < nodeCount; i++)
            {
                nodes.Add(new ServerNode(bus));
            }

            var timeout = TimeSpan.FromSeconds(5);

            foreach (var node in nodes)
            {
                node.Server.Configuration.HeartBeatInterval = timeout;
                node.Server.Configuration.DisconnectTimeout = TimeSpan.Zero;
                node.Server.MapConnection <FarmConnection>("/echo");
            }

            var loadBalancer = new LoadBalancer(nodes.Select(f => f.Server).ToArray());
            var transport    = new Client.Transports.LongPollingTransport(loadBalancer);

            var connection = new Client.Connection("http://goo/echo");

            connection.Start(transport).Wait();

            for (int i = 0; i < nodes.Count; i++)
            {
                nodes[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1));
                Thread.Sleep(TimeSpan.FromSeconds(1));
            }

            connection.Stop();

            Thread.Sleep(TimeSpan.FromTicks(timeout.Ticks * nodes.Count));

            Assert.Equal(1, nodes.Sum(n => n.Connection.DisconnectCount));
        }
Exemple #2
0
        /// <summary>
        /// Installs SignalR performance counters.
        /// </summary>
        public IList <string> InstallCounters()
        {
            // Delete any existing counters
            UninstallCounters();

            var counterCreationData = SignalRPerfCounterManager.GetCounterPropertyInfo()
                                      .Select(p =>
            {
                var attribute = SignalRPerfCounterManager.GetPerformanceCounterAttribute(p);
                return(new CounterCreationData(attribute.Name, attribute.Description, attribute.CounterType));
            })
                                      .ToArray();

            var createDataCollection = new CounterCreationDataCollection(counterCreationData);

            PerformanceCounterCategory.Create(SignalRPerfCounterManager.CategoryName,
                                              "SignalR application performance counters",
                                              PerformanceCounterCategoryType.MultiInstance,
                                              createDataCollection);

            return(counterCreationData.Select(c => c.CounterName).ToList());
        }
Exemple #3
0
        public void FarmDisconnectOnlyRaisesEventOnce()
        {
            // Each node shares the same bus but are indepenent servers
            var counters = new SignalR.Infrastructure.PerformanceCounterManager();
            var bus = new MessageBus(new TraceManager(), counters);
            var nodeCount = 3;
            var nodes = new List<ServerNode>();
            for (int i = 0; i < nodeCount; i++)
            {
                nodes.Add(new ServerNode(bus));
            }

            var timeout = TimeSpan.FromSeconds(5);
            foreach (var node in nodes)
            {
                node.Server.Configuration.HeartBeatInterval = timeout;
                node.Server.Configuration.DisconnectTimeout = TimeSpan.Zero;
                node.Server.MapConnection<FarmConnection>("/echo");
            }

            var loadBalancer = new LoadBalancer(nodes.Select(f => f.Server).ToArray());
            var transport = new Client.Transports.LongPollingTransport(loadBalancer);

            var connection = new Client.Connection("http://goo/echo");

            connection.Start(transport).Wait();

            for (int i = 0; i < nodes.Count; i++)
            {
                nodes[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1));
                Thread.Sleep(TimeSpan.FromSeconds(1));
            }

            connection.Stop();

            Thread.Sleep(TimeSpan.FromTicks(timeout.Ticks * nodes.Count));

            Assert.Equal(1, nodes.Sum(n => n.Connection.DisconnectCount));
        }
Exemple #4
0
        public void SendingCommandObjectSetsCommandOnBus()
        {
            var messageBus = new Mock<IMessageBus>();
            var counters = new PerformanceCounterManager();
            Message message = null;
            messageBus.Setup(m => m.Publish(It.IsAny<Message>())).Returns<Message>(m =>
            {
                message = m;
                return TaskAsyncHelper.Empty;
            });

            var serializer = new JsonNetSerializer();
            var traceManager = new Mock<ITraceManager>();
            var connection = new Connection(messageBus.Object,
                                            serializer,
                                            "signal",
                                            "connectonid",
                                            new[] { "a", "signal", "connectionid" },
                                            new string[] { },
                                            traceManager.Object,
                                            new AckHandler(cancelAcksOnTimeout: false,
                                                           ackThreshold: TimeSpan.Zero,
                                                           ackInterval: TimeSpan.Zero),
                                            counters);

            connection.Publish("a", new Command
            {
                Type = CommandType.AddToGroup,
                Value = "foo"
            });

            Assert.NotNull(message);
            Assert.True(message.IsCommand);
            var command = serializer.Parse<Command>(message.Value);
            Assert.Equal(CommandType.AddToGroup, command.Type);
            Assert.Equal("foo", command.Value);
        }