nanoFramework.SignalR.Client 1.1.71

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

// Install nanoFramework.SignalR.Client as a Cake Tool
#tool nuget:?package=nanoFramework.SignalR.Client&version=1.1.71                

Quality Gate Status Reliability Rating NuGet #yourfirstpr Discord

nanoFramework logo


文档语言: 英语 | 简体中文

欢迎使用.NET nanoFramework SignalR客户端库仓库

此API尽可能镜像官方.NET Microsoft.AspNetCore.SignalR.Client API。异常主要来自于.NET nanoFramework中缺少async和泛型支持。

构建状态

组件 构建状态 NuGet包
nanoFramework.SignalR.Client Build Status NuGet

用法

这是一个SignalR客户端库,它允许您将您的.net nanoFramework设备连接到SignalR中心。SignalR是ASP.NET框架的一部分,使得创建需要服务器高频更新的Web应用程序变得简单,如游戏。在物联网领域,SignalR可以用于创建例如显示连接智能电表的实时图表、控制机械臂等Web应用程序。

重要:您必须连接到一个具有有效IP地址的网络。请参考网络助手上的示例,了解如何设置此功能。

连接到集线器

为了建立连接,创建一个HubConnection客户端。您需要在初始化HubConnection时设置集线器URL。您还可以通过添加ClientWebsocketHeaders来设置自定义头部,通过添加HubConnectionOptions来设置额外选项。这些选项主要用于更改底层WebSocket的设置以及设置额外的SSL选项。您可以通过调用Start来开始连接。

using System;
using System.Diagnostics;
using System.Threading;
using nanoFramework.SignalR.Client;

namespace NFSignalrTestClient
{
    public class Program
    {
        public static void Main()
        {
            //setup connection
            var options = new HubConnectionOptions() { Reconnect = true };
            HubConnection hubConnection = new HubConnection("http://YourSignalrTestServer/testhub", options: options);
            
            hubConnection.Closed += HubConnection_Closed;

            hubConnection.On("ReceiveMessage", new Type[] { typeof(string), typeof(string) }, (sender, args) =>
            {
                var name = (string)args[0];
                var message = (string)args[1];

                Console.WriteLine($"{name} : {message}");
            });
            
            //start connection
            hubConnection.Start();
                     

            AsyncResult dashboardClientConnected = hubConnection.InvokeCoreAsync("AwaitCientConnected", typeof(bool), new object[] { }, -1);

            int seconds = 0;

            while (!dashboardClientConnected.Completed)
            {
                Debug.WriteLine($"Waited {seconds} for client to open webapp");
                seconds++;
                Thread.Sleep(1000);
            }

            if ((bool)dashboardClientConnected.Value)
            {
                hubConnection.SendCore("ReportStatus", new object[] { "Client Connected" });

                int count = 0;
                while (hubConnection.State == HubConnectionState.Connected)
                {
                    hubConnection.InvokeCore("SendMessage", null, new object[] { count, "this is a control message" });
                    count++;
                    Thread.Sleep(1000);
                }
            }
            else
            {
                hubConnection.Stop("client failed to connect");
            }
        }

        private static void HubConnection_Closed(object sender, SignalrEventMessageArgs message)
        {
            Debug.WriteLine($"closed received with message: {message.Message}");
        }
    }
}
处理丢失的连接

自动重连默认情况下,如果连接丢失或首次连接失败,HubConnection客户端将不会自动重连。通过在HubConnection初始化时将Reconnect设置为true,客户端将尝试在0、2、10和30秒的间隔内重连,连续四次失败后将停止。当客户端尝试重连时,将触发Reconnecting事件。

注意:只有在收到包含服务器重连请求的服务器关闭消息后关闭连接时,客户端才会尝试重连。

连接状态

可以通过检查HubConnectionState来监控连接状态。不同的状态有:Disconnected(断开)、Connected(连接)、Connecting(连接中)和Reconnecting(正在重连)。连接建立后,每次状态更改将触发一个事件:Closed(关闭)、Reconnecting(正在重连)或Reconnected(重连成功)。可以使用这些事件手动处理断开连接和重连。

从客户端调用集线器方法

有三种方式可以调用集线器上的方法。所有这三种方法都需要您传递集线器方法名以及集线器方法中定义的任何参数。

最简单的方式是调用SendCore。这将调用方法而不需要等待或期待来自服务器的任何响应。这是一个“发射后不管”的方法。

第二种方法是InvokeCore。InvokeCore需要传递集线器方法名、集线器方法返回类型、参数以及可选的超时时间(以毫秒为单位)。如果没有提供超时,则使用默认的ServerTimeout。这是一个同步方法,将等待服务器回复。返回的对象是方法返回类型参数的类型。需要手动将对象转换为正确类型。注意:如果集线器方法返回类型是void,调用InvokeCoreInvokeCoreAsync时的返回类型应为null。

注意:将超时设置为-1将禁用服务器超时。如果未收到服务器的返回消息,这将无限期等待。

第三种方法是InvokeCoreAsync。这和InvokeCore相同,但它是异步的。它将返回一个AsyncResult。

AsyncResult

AsyncResult监控集线器方法的返回消息。完成时Completed将为true。在完成时,Value将保留需要手动转换为正确类型的返回对象。在完成之前调用Value将导致等待服务器返回。如果发生错误,则Error将为true,并且错误消息将在ErrorMessage中。

AsyncResult dashboardClientConnected = hubConnection.InvokeCoreAsync("AwaitCientConnected", typeof(bool), new object[] { }, -1);

int seconds = 0;

while (!dashboardClientConnected.Completed)
{
    Debug.WriteLine($"Waited {seconds} for client to open webapp");
    seconds++;
    Thread.Sleep(1000);
}

if ((bool)dashboardClientConnected.Value)
{
    Debug.WriteLine("The client connected to the dashboard, start sending live data");
}

从集线器调用客户端方法

在连接开始前使用connection.On定义集线器调用的方法。

connection.On("ReceiveMessage", new Type[] { typeof(string), typeof(string) }, (sender, args) =>
{
    var name = args[0] as string;
    var message = args[1] as string;

    Debug.WriteLine($"{name} : {message}");
});

connection.On中前面的代码在服务器端代码使用SendAsync方法调用它时运行。

public async Task SendMessage(string user, string message)
{
    await Clients.All.SendAsync("ReceiveMessage", user, message);
}

停止连接

可以通过调用Stop来关闭连接。这将停止连接。如果您想因为例如设备传感器故障等原因停止连接,可以通过可选的errorMessage将错误信息传达给服务器。

反馈和文档

有关文档、提供反馈、问题和了解如何贡献,请参阅主仓库

加入我们的Discord社区这里

鸣谢

此项目的贡献者名单可在CONTRIBUTORS中找到。

许可证

nanoFramework类库采用MIT许可证

行为准则

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

.NET基金会

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

产品 兼容及额外计算的目标框架版本。
.NET框架 net 兼容。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET标准的更多信息。

NuGet包

此包未被任何NuGet包使用。

GitHub仓库

此包未被任何流行的GitHub仓库使用。

版本 下载 最后更新
1.1.71 51 8/1/2024
1.1.68 94 6/3/2024
1.1.66 111 4/4/2024
1.1.64 117 2/1/2024
1.1.62 89 1/26/2024
1.1.59 201 11/10/2023
1.1.57 173 5/29/2023
1.1.54 143 5/19/2023
1.1.49 260 2/20/2023
1.1.46 250 1/26/2023
1.1.44 279 12/28/2022
1.1.40 427 11/24/2022
1.1.38 313 11/15/2022
1.1.36 379 10/28/2022
1.1.34 357 10/27/2022
1.1.32 354 10/25/2022
1.1.30 357 10/25/2022
1.1.26 396 10/24/2022
1.1.24 383 10/21/2022
1.1.22 374 10/12/2022
1.1.20 384 10/11/2022
1.1.18 384 9/29/2022
1.1.14 430 9/23/2022
1.1.12 412 9/23/2022
1.1.10 476 9/18/2022
1.1.8 433 9/16/2022
1.1.6 398 9/8/2022
1.1.4 416 8/6/2022
1.1.2 410 8/5/2022
1.0.0 451 3/29/2022
1.0.0-preview.93 126 3/29/2022
1.0.0-preview.91 115 3/29/2022
1.0.0-preview.89 123 3/18/2022
1.0.0-preview.87 115 3/17/2022
1.0.0-preview.85 113 3/15/2022
1.0.0-preview.83 109 3/14/2022
1.0.0-preview.81 114 3/14/2022
1.0.0-preview.79 103 3/14/2022
1.0.0-preview.77 106 3/14/2022
1.0.0-preview.75 112 3/14/2022
1.0.0-preview.73 115 3/10/2022
1.0.0-preview.71 107 3/9/2022
1.0.0-preview.69 106 3/6/2022
1.0.0-preview.67 120 3/5/2022
1.0.0-preview.65 118 3/4/2022
1.0.0-preview.63 110 3/3/2022
1.0.0-preview.61 107 3/1/2022
1.0.0-preview.59 117 2/26/2022
1.0.0-preview.57 116 2/24/2022
1.0.0-preview.55 116 2/18/2022
1.0.0-preview.53 109 2/18/2022
1.0.0-preview.50 118 2/17/2022
1.0.0-preview.48 117 2/13/2022
1.0.0-preview.46 123 2/12/2022
1.0.0-preview.44 115 2/11/2022
1.0.0-preview.42 112 2/9/2022
1.0.0-preview.40 111 2/8/2022
1.0.0-preview.38 106 2/7/2022
1.0.0-preview.36 121 2/6/2022
1.0.0-preview.33 127 2/5/2022
1.0.0-preview.31 133 2/1/2022
1.0.0-preview.28 124 1/31/2022