首页 >后端开发 >C++ >如何使用服务器和客户端构建简单的 SignalR 控制台应用程序?

如何使用服务器和客户端构建简单的 SignalR 控制台应用程序?

DDD
DDD原创
2025-01-05 03:54:42782浏览

How to Build a Simple SignalR Console Application with a Server and Client?

SignalR 控制台应用程序示例

在本文中,我们将探索使用 SignalR 与 .NET 通信的控制台应用程序示例集线器。

SignalR设置

在继续之前,请确保通过 NuGet 在服务器和客户端应用程序中安装以下 SignalR 包:

  • 服务器:SignalR.Host.Self(版本 0.5.5) 2)
  • 客户: Microsoft.AspNet.SignalR.Client

服务器实现

使用以下代码创建控制台应用服务器:

using System;
using SignalR.Hubs;

namespace SignalR.Hosting.Self.Samples
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://127.0.0.1:8088/";
            var server = new Server(url);

            server.MapHubs();

            server.Start();

            Console.WriteLine("Server running on {0}", url);

            while (true)
            {
                ConsoleKeyInfo ki = Console.ReadKey(true);
                if (ki.Key == ConsoleKey.X)
                {
                    break;
                }
            }
        }

        [HubName("CustomHub")]
        public class MyHub : Hub
        {
            public string Send(string message)
            {
                return message;
            }

            public void DoSomething(string param)
            {
                Clients.addMessage(param);
            }
        }
    }
}

客户端实现

在单独的控制台应用程序中客户端:

using System;
using SignalR.Client.Hubs;

namespace SignalRConsoleApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var connection = new HubConnection("http://127.0.0.1:8088/");

            var myHub = connection.CreateHubProxy("CustomHub");

            connection.Start().ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    Console.WriteLine("Error opening connection: {0}", task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine("Connected");
                }

            }).Wait();

            myHub.Invoke<string>("Send", "HELLO World ").ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    Console.WriteLine("Error calling Send: {0}", task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine(task.Result);
                }
            });

            myHub.On<string>("addMessage", param => { Console.WriteLine(param); });

            myHub.Invoke<string>("DoSomething", "I'm doing something!!!").Wait();

            Console.Read();
            connection.Stop();
        }
    }
}

问题和解决方案

分配中心名称

如果您遇到特定中心的问题服务器端代码中的名称(“test”)(例如,[HubName(“test”)]),确保它与客户端代码中的 HubName 属性不冲突。服务器和客户端中使用的集线器名称必须匹配才能正确通信。

以上是如何使用服务器和客户端构建简单的 SignalR 控制台应用程序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn