nanoFramework.System.Net.WebSockets.Server 1.1.102

前缀已保留
dotnet add package nanoFramework.System.Net.WebSockets.Server --version 1.1.102                
NuGet\Install-Package nanoFramework.System.Net.WebSockets.Server -Version 1.1.102                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.System.Net.WebSockets.Server" Version="1.1.102" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用此包。
paket add nanoFramework.System.Net.WebSockets.Server --version 1.1.102                
#r "nuget: nanoFramework.System.Net.WebSockets.Server, 1.1.102"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将其复制到交互式工具或脚本的源代码中以引用此包。
// Install nanoFramework.System.Net.WebSockets.Server as a Cake Addin
#addin nuget:?package=nanoFramework.System.Net.WebSockets.Server&version=1.1.102

// Install nanoFramework.System.Net.WebSockets.Server as a Cake Tool
#tool nuget:?package=nanoFramework.System.Net.WebSockets.Server&version=1.1.102                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


欢迎使用 .NET nanoFramework System.Net.WebSockets 库仓库

此 API 尽可能地反映了官方 .NET System.Net.WebSockets。异常主要来自 .NET nanoFramework 中缺乏 async 和泛型支持。

构建状态

组件 构建状态 NuGet 包
System.Net.WebSockets Build Status NuGet
System.Net.WebSockets.Client Build Status NuGet
System.Net.WebSockets.Server Build Status NuGet

示例

WebSockets 服务器示例

Server.RgbSample 展示了如何使用 Websocket Server 和托管 WebApp 的 Web 服务器控制 Atom Lite ESP32 上的 RGB LED。

WebSockets 客户端示例

Client.Sample 展示了如何使用 Websocket 客户端。

WebSockets 服务器和客户端示例

ServerClient.Sample 展示了如何配置和启动 WebSocket 服务器和(ssl)客户端。

用法

这是一个.NET nanoFramework的WebSocket客户端和服务器库。WebSocket主要用于创建需要与服务器保持恒定连接的交互式Web应用。在物联网领域,一些协议(如SignalR)需要WebSocket连接。一些物联网服务器也支持或要求通过WebSocket运行某些协议,如MQTT。

客户端

连接到WebSocket服务器

要连接到WebSocket服务器,创建一个ClientWebsocket对象。您可以在初始化时添加ClientWebSocketOptions来设置额外的WebSocket选项。这些选项可以用来设置特定的SSL选项、更改保持活跃间隔、服务器超时以及设置最大发送和接收消息大小。您可以通过调用Connect并传入WebSocket服务器的uri来启动连接。WebSocket位置总是以ws://wss://开头。您可以使用可选的ClientWebSocketHeaders来设置特定的头部信息。

注意:ClientWebSocketOptions.MaxFragmentSize设置了传出消息的最大包大小。当发送的消息超过最大包大小时,该消息将自动分块成较小的消息。

using System;
using System.Threading;
using System.Net.WebSockets;
using System.Net.WebSockets.WebSocketFrame;
using System.Text;

namespace NFWebsocketTestClient
{
    public class Program
    {
        public static void Main()
        {
            //setup WebSocketClient
            ClientWebSocket websocketClient = new ClientWebSocket(new ClientWebSocketOptions()
            {
                //Change the heart beat to a 30 second interval
                KeepAliveInterval = TimeSpan.FromSeconds(30)
            });

            //Handler for receiving websocket messages
            websocketClient.MessageReceived += WebsocketClient_MessageReceived;
            //Setup custom header
            var headers = new ClientWebSocketHeaders();
            headers["userId"] = "nano";

            //Connect the client to the websocket server with custom headers
            websocketClient.Connect("wss://websocket.nanoFramework.net", headers);

            //Send a message very 5 seconds
            while(websocketClient.State == System.Net.WebSockets.WebSocketFrame.WebSocketState.Open)
            {
                websocketClient.SendString("Hello nanoFramework Websocket!");
                Thread.Sleep(5000);
            }
        }

        private static void WebsocketClient_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            var client = (ClientWebSocket)sender;

            //If message is of type Text, echo message back to client
            if(e.Frame.MessageType == WebSocketMessageType.Text)
            {
                string message = Encoding.UTF8.GetString(e.Frame.Buffer, 0, e.Frame.MessageLength);
                client.SendString(message);
            }
        }
    }
}
连接状态

可以通过检查ClientWebSocket的State来监控连接状态。连接建立后,状态设置为Open。如果状态为Open,客户端才能发送消息。

接收消息

可以通过设置MessageReceived的事件处理程序来接收消息。每次收到消息时都会调用此处理程序。MesageReceivedArguments包含包含消息的MessageReceivedFrame

消息帧

WebSocket的MessageReceivedFrame支持两种类型的消息:TextBinaryMessageType属性指示接收的消息类型。EndPoint包含消息发送者的IPEndPoint。Buffer包含实际发送的信息。

注意:为了能够接收分片消息,用户需要实现自己的逻辑。通过检查IsFragmented,您可以确定是否在处理分片消息。Fragmentation属性标识您是否在处理消息的起始、中间或结束片段。

发送消息

可以通过调用SendString发送文本消息,或通过调用SendBytes使用字节数组发送二进制消息。您还可以调用Send,它接受一个字节数组和MessageType作为参数。

关闭连接

可以通过调用Close来关闭连接。调用此方法将发送一个关闭消息。您可以选择指定WebSocketCloseStatus和描述关闭原因以进行调试。每次关闭连接时都会触发Closed事件。

服务器

WebSocketServer是.NET nanoFramework的WebSocket主机,可以处理多个WebSocket连接。服务器可以独立运行,或与nanoFramework的HttpListenerWebServer集成。服务器与客户端实现共享通用的WebSocket基础。

创建服务器

要启动一个新服务器,使用可选的WebSocketServerOptions创建一个WebsocketServer对象。默认情况下,这将启动一个自托管的端口80服务器,通过设置PrefixPort选项,您可以指定服务器侦听的端口号和前缀。默认前缀为/。建议设置MaxClients以确保服务器不会耗尽资源。

如果您希望托管一个与WebSocket服务器交互的Web应用,最好直接将websocket服务器与.NET nanoFramework的HttpListenerWebServer集成。要执行此操作,将IsStandAlone选项设置为false

启动WebSocket服务器只需调用Start

WebSocketServer wsServer = new WebSocketServer(new WebSocketServerOptions() { 
                MaxClients = 10,
                IsStandAlone = false
            });

wsServer.MessageReceived += WsServer_MessageReceived;
wsServer.Start();
处理客户端连接

当WebSocket服务器自托管时,客户端连接会自动处理并被添加到WebSocket服务器客户端池中。您可以使用ClientsCount来检查已连接客户端的数量。调用ListClients将返回一个包含所有已连接客户端IP端点的数组。

当使用.NET nanoFramework的HttpListenerWebServer时,您可以通过调用AddWebSocketHttpListenerContext传递给WebSocket服务器以升级WebSocket请求。如果连接成功建立,AddWebsocket将返回true

//webserver receive message event handler
private static void WebServer_CommandReceived(object obj, WebServerEventArgs e)
{
    //check the path of the request
    if(e.Context.Request.RawUrl == "/ws")
    {
        //check if this is a websocket request or a page request 
        if(e.Context.Request.Headers["Upgrade"] == "websocket")
        {
            //Upgrade to a websocket
            _wsServer.AddWebSocket(e.Context);
        }
    }
}
处理新的连接

当客户端连接时,将调用WebsocketOpened事件。WebserverEventArgs包含客户端的端点。

处理连接关闭

当客户端连接关闭时,将再次调用包含在webserverEventArgs中的端点的WebsocketClosed事件。

关闭客户端连接

您可以调用DisconnectClient来关闭特定的客户端连接。您需要提供要断开连接的客户端端点,并且您还需要提供适当的WebSocketCloseStatus

接收消息

接收消息

当来自任何客户端的消息被接收时,将引发MessageReceived事件。有关如何处理消息,请参阅客户端部分的接收消息消息帧。可以通过检查MessageFrameEndpoint属性来识别发送消息的客户端。

发送消息

您可以通过调用SendString(用于发送文本消息)或SendData(用于使用字节数组发送二进制消息)来向特定客户端发送消息。您需要指定要发送消息的特定客户端EndPoint。如果您想向所有客户端发送消息,您可以使用Broadcast并提供字节数组或字符串。

停止服务器

您可以通过调用Stop来停止WebSocket服务器。

反馈和文档

有关文档、提供反馈、问题以及了解如何贡献,请参阅主页存储库

致谢

此项目的贡献者列表可在CONTRIBUTORS找到。

许可

nanoFramework类库是根据MIT许可证授权的。

行为准则

本项目采用了贡献者盟约中定义的行为准则,以明确我们社区中预期的行为。有关更多信息,请参阅.NET Foundation行为准则

.NET基金会

本项目由.NET基金会支持。

产品 兼容的以及额外的计算目标框架版本。
.NET Framework net兼容。
兼容的目标框架(s)
包含的目标框架(包中包含)
了解更多关于 目标框架.NET 标准

NuGet 包

此包未被任何 NuGet 包使用。

GitHub 仓库 (1)

显示对 nanoFramework.System.Net.WebSockets.Server 依赖的前 1 个最受欢迎的 GitHub 仓库

仓库 星星
nanoframework/Samples
🍬 来自 nanoFramework 团队用于测试、概念验证和其他探索性尝试的代码示例
版本 下载 最后更新
1.1.102 55 7/30/2024
1.1.101 57 7/29/2024
1.1.98 180 5/13/2024
1.1.96 66 5/13/2024
1.1.94 86 5/10/2024
1.1.92 177 4/9/2024
1.1.90 93 4/8/2024
1.1.88 105 4/3/2024
1.1.86 104 4/3/2024
1.1.84 382 1/29/2024
1.1.82 301 1/26/2024
1.1.80 307 1/24/2024
1.1.78 315 1/20/2024
1.1.75 605 11/10/2023
1.1.72 450 11/9/2023
1.1.70 429 11/3/2023
1.1.68 532 10/10/2023
1.1.66 433 10/10/2023
1.1.64 511 10/4/2023
1.1.62 639 9/4/2023
1.1.60 564 9/4/2023
1.1.57 835 5/19/2023
1.1.52 841 2/17/2023
1.1.50 764 1/24/2023
1.1.48 815 12/28/2022
1.1.45 808 12/27/2022
1.1.41 945 11/23/2022
1.1.39 894 10/26/2022
1.1.37 832 10/26/2022
1.1.35 848 10/26/2022
1.1.33 845 10/25/2022
1.1.30 882 10/24/2022
1.1.28 874 10/23/2022
1.1.26 862 10/23/2022
1.1.23 891 10/10/2022
1.1.21 871 10/8/2022
1.1.19 891 10/8/2022
1.1.16 912 9/22/2022
1.1.14 890 9/22/2022
1.1.12 940 9/22/2022
1.1.10 910 9/22/2022
1.1.8 960 9/15/2022
1.1.6 952 8/5/2022
1.1.5 875 8/4/2022
1.1.4 870 8/4/2022
1.1.2 900 8/4/2022
1.0.1.25 1,035 6/13/2022
1.0.1.23 938 6/9/2022
1.0.1.21 881 6/8/2022
1.0.1.19 929 5/27/2022
1.0.1.17 892 5/26/2022
1.0.1.15 937 5/19/2022
1.0.1.13 921 5/18/2022
1.0.1.11 985 5/4/2022
1.0.1.9 894 5/3/2022
1.0.1 1,020 3/29/2022
1.0.0-preview.99 122 3/29/2022
1.0.0-preview.98 122 3/28/2022
1.0.0-preview.97 116 3/28/2022
1.0.0-preview.96 115 3/28/2022
1.0.0-preview.95 111 3/28/2022
1.0.0-preview.94 125 3/17/2022
1.0.0-preview.93 115 3/17/2022
1.0.0-preview.92 113 3/14/2022
1.0.0-preview.91 110 3/14/2022
1.0.0-preview.90 111 3/14/2022
1.0.0-preview.89 116 3/14/2022
1.0.0-preview.88 122 3/14/2022
1.0.0-preview.87 115 3/14/2022
1.0.0-preview.86 106 3/9/2022
1.0.0-preview.85 119 3/5/2022
1.0.0-preview.84 114 3/4/2022
1.0.0-preview.83 119 3/3/2022
1.0.0-preview.82 121 3/1/2022
1.0.0-preview.81 109 2/25/2022
1.0.0-preview.80 124 2/18/2022
1.0.0-preview.77 122 2/17/2022
1.0.0-preview.75 138 2/12/2022
1.0.0-preview.74 120 2/7/2022
1.0.0-preview.73 125 2/6/2022
1.0.0-preview.72 125 2/5/2022
1.0.0-preview.71 137 2/4/2022
1.0.0-preview.70 128 2/4/2022
1.0.0-preview.69 127 1/28/2022
1.0.0-preview.68 125 1/28/2022
1.0.0-preview.67 126 1/28/2022
1.0.0-preview.65 144 1/21/2022
1.0.0-preview.64 126 1/21/2022
1.0.0-preview.63 124 1/21/2022
1.0.0-preview.62 140 1/21/2022
1.0.0-preview.61 132 1/21/2022
1.0.0-preview.60 128 1/21/2022
1.0.0-preview.59 128 1/15/2022
1.0.0-preview.58 133 1/13/2022
1.0.0-preview.57 135 1/13/2022
1.0.0-preview.52 138 1/12/2022
1.0.0-preview.50 141 1/6/2022
1.0.0-preview.48 125 12/31/2021
1.0.0-preview.47 147 12/20/2021
1.0.0-preview.40 150 12/5/2021
1.0.0-preview.38 139 12/2/2021
1.0.0-preview.36 141 12/1/2021
1.0.0-preview.33 175 10/27/2021
1.0.0-preview.26 185 6/1/2021
1.0.0-preview.24 184 5/24/2021
1.0.0-preview.20 156 4/6/2021