你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:从控制台应用广播实时消息

Azure SignalR 服务提供了 REST API 来支持服务器到客户端通信方案,例如广播。 你可以选择可以进行 REST API 调用的任何编程语言。 你可以将消息发布到所有已连接的客户端、通过名称指定的特定客户端或者一组客户端。

在本快速入门中,你将了解如何从命令行应用使用 C# 将消息发送到已连接的客户端应用。

先决条件

本快速入门可以在 macOS、Windows 或 Linux 上运行。

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

遇到问题? 尝试使用故障排除指南通知我们

登录 Azure

使用 Azure 帐户登录到 Azure 门户

遇到问题? 尝试使用故障排除指南通知我们

在本部分中,你将创建一个基本 Azure SignalR 实例来用于你的应用。 以下步骤使用 Azure 门户创建新实例,但你也可以使用 Azure CLI。 有关详细信息,请参阅 Azure SignalR 服务 CLI 参考中的 az signalr create 命令。

  1. 登录 Azure 门户
  2. 在页面的左上角,选择“+ 创建资源” 。
  3. 在“创建资源”页上,在“搜索服务和市场”文本框中,输入“signalr”,然后从列表中选择“SignalR 服务”。
  4. 在“SignalR 服务”页上,选择“创建”。
  5. 在“基本信息”选项卡上,输入新 SignalR 服务实例的基本信息。 输入以下值:
字段 建议的值 描述
订阅 选择订阅 选择要用于创建新的 SignalR 服务实例的订阅。
资源组 创建一个名为 SignalRTestResources 的资源组 为 SignalR 资源选择或创建资源组。 对于本教程,创建新的资源组比使用现有资源组更为合适。 若要在完成本教程后释放资源,请删除资源组。

删除资源组还会删除属于该组的所有资源。 此操作不能撤消。 删除资源组之前,请确保它不包含你希望保留的资源。

有关详细信息,请参阅 Using resource groups to manage your Azure resources(使用资源组管理 Azure 资源)。
资源名称 testsignalr 输入用于 SignalR 资源的唯一资源名称。 如果你的区域中已使用了 testsignalr,请添加一个数字或字符,以将名称设为唯一。

该名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母和连字符 (-) 字符。 该名称的开头或末尾不能是连字符字符,并且连续的连字符字符无效。
区域 选择你的区域 为新的 SignalR 服务实例选择合适的区域。

Azure SignalR 服务当前并非在所有区域中都可用。 有关详细信息,请参阅 Azure SignalR 服务区域可用性
定价层 选择“更改”,然后选择“免费(仅限开发/测试)”。 选择“选择”以确认你选择的定价层。 Azure SignalR 服务有三个定价层:免费、标准和高级。 教程使用的是免费层,除非在先决条件中另行说明。

若要详细了解各个层级之间的功能差异以及定价,请参阅 Azure SignalR 服务定价
服务模式 选择适当的服务模式 在 Web 应用中托管 SignalR 中心逻辑并使用 SignalR 服务作为代理时,请使用“默认”。 使用无服务器技术(如 Azure Functions)托管 SignalR 中心逻辑时,请使用“无服务器”

“经典”模式仅用于向后兼容,不建议使用。

有关详细信息,请参阅 Azure SignalR 服务中的服务模式

对于 SignalR 教程,你不需要更改“网络”和“标记”选项卡上的设置。

  1. 选择“基本信息”选项卡底部的“查看 + 创建”按钮。
  2. 在“查看 + 创建”选项卡上检查各个值,然后选择“创建”。 部署需要几分钟时间才能完成。
  3. 在部署完成后,选择“转到资源组”按钮。
  4. 在 SignalR 资源页面上,从左侧菜单中选择“设置”下的“密钥”。
  5. 复制主密钥的连接字符串。 在本教程中,稍后你将需要使用此连接字符串来配置你的应用。

遇到问题? 尝试使用故障排除指南通知我们

克隆示例应用程序

部署服务时,请执行切换以准备代码。 克隆来自 GitHub 的示例应用,设置 SignalR 服务连接字符串,并在本地运行该应用程序。

  1. 打开 git 终端窗口。 切换到要克隆示例项目的文件夹。

  2. 运行下列命令,克隆示例存储库。 此命令在计算机上创建示例应用程序的副本。

    git clone https://github.com/aspnet/AzureSignalR-samples.git
    

遇到问题? 尝试使用故障排除指南通知我们

生成并运行示例

此示例是一个控制台应用,展示了如何使用 Azure SignalR 服务。 它提供了两种模式:

  • 服务器模式:使用简单的命令调用 Azure SignalR 服务 REST API。
  • 客户端模式:连接到 Azure SignalR 服务,并从服务器接收消息。

另外,你还将了解如何生成访问令牌来向 Azure SignalR 服务进行身份验证。

生成可执行文件

我们使用 macOS osx.10.13-x64 作为示例。 你可以找到有关如何在其他平台上进行生成的参考资料

cd AzureSignalR-samples/samples/Serverless/

dotnet publish -c Release -r osx.10.13-x64

启动客户端

cd bin/Release/netcoreapp2.1/osx.10.13-x64/

Serverless client <ClientName> -c "<ConnectionString>" -h <HubName>

启动服务器

cd bin/Release/netcoreapp2.1/osx.10.13-x64/

Serverless server -c "<ConnectionString>" -h <HubName>

遇到问题? 尝试使用故障排除指南通知我们

运行示例而不发布

还可以运行以下命令来启动服务器或客户端

# Start a server
dotnet run -- server -c "<ConnectionString>" -h <HubName>

# Start a client
dotnet run -- client <ClientName> -c "<ConnectionString>" -h <HubName>

使用 user-secrets 指定连接字符串

你可以运行示例的根目录中的 dotnet user-secrets set Azure:SignalR:ConnectionString "<ConnectionString>"。 之后,将不再需要选项 -c "<ConnectionString>"

遇到问题? 尝试使用故障排除指南通知我们

使用情况

在服务器启动后,使用以下命令发送消息:

send user <User Id>
send users <User List>
send group <Group Name>
send groups <Group List>
broadcast

可以启动具有不同客户端名称的多个客户端。

遇到问题? 尝试使用故障排除指南通知我们

与非 Microsoft 服务集成

使用 Azure SignalR 服务,可以将第三方服务与系统集成。

定义技术规范

下表显示到目前为止受支持的 REST API 的所有版本。 也可找到每个特定版本的定义文件

版本 API 状态 特定
1.0-preview 可用 5002 Swagger
1.0 可用 标准 Swagger

适用于每个特定版本的 API 的列表在下表中提供。

API 1.0-preview 1.0
广播到所有对象
广播到组
广播到某些组 (已弃用) N / A
发送给用户
发送到某些用户 (已弃用) N / A
将用户添加到组 N / A
从组中删除用户 N / A
检查用户是否存在 N / A
从所有组中删除用户 N / A
发送到连接 N / A
向组中添加连接 N / A
从组中删除连接 N / A
关闭客户端连接 N / A
服务运行状况 N / A

广播到所有人

版本 API HTTP 方法 请求 URL 请求正文
1.0-preview POST https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name> {"target": "<method-name>", "arguments": [...]}
1.0 POST https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name> {"target": "<method-name>", "arguments": [...]}

广播到组

版本 API HTTP 方法 请求 URL 请求正文
1.0-preview POST https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/group/<group-name> {"target": "<method-name>", "arguments": [...]}
1.0 POST https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name> {"target": "<method-name>", "arguments": [...]}

发送给用户

版本 API HTTP 方法 请求 URL 请求正文
1.0-preview POST https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/user/<user-id> {"target": "<method-name>", "arguments": [...]}
1.0 POST https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id> {"target": "<method-name>", "arguments": [...]}

将用户添加到组

版本 API HTTP 方法 请求 URL
1.0 PUT https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id>

从组中删除用户

版本 API HTTP 方法 请求 URL
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id>

检查用户是否存在于组中

API 版本 API HTTP 方法 请求 URL
1.0 GET https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups/<group-name>
1.0 GET https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id>
响应状态代码 说明
200 用户存在
404 用户不存在

从所有组中删除用户

API 版本 API HTTP 方法 请求 URL
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups

将消息发送到连接

API 版本 API HTTP 方法 请求 URL 请求正文
1.0 POST https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> { "target":"<method-name>", "arguments":[ ... ] }

向组中添加连接

API 版本 API HTTP 方法 请求 URL
1.0 PUT https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id>
1.0 PUT https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name>

从组中删除连接

API 版本 API HTTP 方法 请求 URL
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id>
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name>

关闭客户端连接

API 版本 API HTTP 方法 请求 URL
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>
1.0 DELETE https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>?reason=<close-reason>

服务运行状况

API 版本 API HTTP 方法 请求 URL
1.0 GET https://<instance-name>.service.signalr.net/api/v1/health
响应状态代码 说明
200 服务良好
5xx 服务错误

遇到问题? 尝试使用故障排除指南通知我们

清理资源

如果不打算继续使用此应用,请按照以下步骤删除本快速入门中创建的所有资源,以免产生任何费用:

  1. 在 Azure 门户的最左侧选择“资源组”,,然后选择创建的资源组。 或者,可以使用搜索框按名称查找资源组。

  2. 在打开的窗口中选择资源组,然后单击“删除资源组”。

  3. 在新窗口中键入要删除的资源组的名称,然后单击“删除”

遇到问题? 尝试使用故障排除指南通知我们

后续步骤

在本快速入门中,你学习了如何使用 REST API 从 SignalR 服务向客户端广播实时消息。 接下来,了解有关如何使用基于 REST API 构建的 SignalR 服务绑定开发和部署 Azure Functions 的更多信息。