在 .net 核心控制台应用程序中创建一个 websocket 服务器

Posted

技术标签:

【中文标题】在 .net 核心控制台应用程序中创建一个 websocket 服务器【英文标题】:Create a websocket server in .net core console application 【发布时间】:2018-06-28 19:14:55 【问题描述】:

有没有办法创建一个可以托管 WebSocket 服务器的 .NET Core 控制台应用程序?

我看到了很多东西,但仅用于 ASP.NET Core 依赖注入。

我最终使用的 NuGet 包必须是 .NET Core 而不是完整的 .NET。

如果我可以在控制台应用程序中使用Microsoft.AspNetCore.WebSockets,我会怎么做?

【问题讨论】:

使用WebClient怎么样? 也许RedHttpServer 适合您的需求?它包装了 AspNetCore 功能,因此您可以使用 3 行创建一个服务器,并且可以从 nuget 安装到控制台应用程序。免责声明:我对其进行了编程 【参考方案1】:

自托管的 ASP.net Core 应用程序实际上是控制台应用程序,使用 Kestrel 作为服务器,您可以以非阻塞方式运行它并将程序作为常规控制台程序继续运行,如下所示:

public static void Main(string[] args)


    var host = new WebHostBuilder()
        .UseKestrel()
        .Build();                     //Modify the building per your needs

    host.Start();                     //Start server non-blocking

    //Regular console code
    while (true)
    
        Console.WriteLine(Console.ReadLine());
    

这样做的唯一缺点是您会在开始时收到一些调试消息,但您可以通过此修改来抑制这些消息:

public static void Main(string[] args)


    ConsOut = Console.Out;  //Save the reference to the old out value (The terminal)
    Console.SetOut(new StreamWriter(Stream.Null)); //Remove console output

    var host = new WebHostBuilder()
        .UseKestrel()
        .Build();                     //Modify the building per your needs

    host.Start();                     //Start server non-blocking

    Console.SetOut(ConsOut);          //Restore output

    //Regular console code
    while (true)
    
        Console.WriteLine(Console.ReadLine());
    

Source about the console output.

【讨论】:

我喜欢这种方法——这也开辟了许多其他可能性,因为我们得到了一个 kestrel 服务器。这就是我要去的。非常感谢!

以上是关于在 .net 核心控制台应用程序中创建一个 websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 .net 核心控制台应用程序创建具有 777 权限的文件

如何在 asp.net 中创建 RESTful Web 服务?

在.net核心MVC中创建JSon

核心ASP.NET

如何在网络核心Web应用程序中创建任务包装器或中间件?

有没有办法在 .NET 6 MAUI 中创建 shell 应用程序和 web 视图之间的双向通信?