如何在C#中从SignalR集线器向客户端推送数据

问题描述 投票:0回答:1

我正在使用MS样本中的代码:

        public Task PushMessage(string Message)
        {
            var T = Clients.All.SendAsync(Message);
            Console.WriteLine("I'm here");
            return T;
        }

但是从未达到过令线。因此,在推送消息之前,我是否需要检查至少一个客户端是否已连接?

我想要实现的目标如下:我有很多小消息需要被推送到连接到集线器的客户端,如果有的话。所以无论如何产生消息,如果客户端连接,他们应该接收它。

现在,我在构建新数据时生成的事件中放置了一个SendMessage调用,但这只会导致回调被保留,因为SendMessage没有返回。

我正在寻找的行为是:如果有客户端,他们会收到消息,如果没有客户端,则丢弃该消息。

我该怎么做到这一点?

我想我可能误解了SignalR是如何工作的,我真的想找到一个例子C#< - > C#,因为网络上的每个例子都是以web / js为中心的。

c# stream signalr
1个回答
0
投票

GitHub中浏览控制台应用程序的一些示例代码。

SignalR仅在有广播连接时才会广播。这是其中的一部分,因此您无需管理这一方面。您当然可以轮询数据或获取数据,但是当您告诉它发送时,SignalR会检查是否有人发送数据。

至于C#到C#与C#到web / js,是的,你在考虑那个错误。如果它是一个控制台应用程序或web / js它是一个客户端。通信是客户端到服务器和服务器(集线器)到客户端。如果它是控制台应用程序或web / js或任何其他类型的客户端并不重要。

以下是我用于演示目的的控制台应用程序示例,它允许我在控制台与网页或网页之间来回聊天,以通过集线器进行控制:

        private static void Main(string[] args)
    {
        try
        {

            var connection = new HubConnection("http://localhost:7132/");
            IHubProxy hub = connection.CreateHubProxy("ChatHub");

            hub.On<string, string>("broadcastMessage", (name, message) => { Console.Write(name + ": "); Console.WriteLine(message); });
            connection.Start().Wait();
            hub.Invoke("Notify", "Console app", connection.ConnectionId);
            string msg = null;

            while ((msg = Console.ReadLine()) != null)
            {
                hub.Invoke("Send", "Console app", msg).Wait();
            }

        }
        catch (Exception e)
        {
            Console.WriteLine("Error" + e.Message);
        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.