Unity SignalR客户端无法接收IoT设备广播消息求助
Unity SignalR客户端无法接收Azure Function广播消息排查
问题背景
原数字孪生示例运行正常,将遥测数据源替换为MXChip IoT设备的真实数据后,Unity端SignalR客户端无法接收广播消息:
- Azure已成功接收设备遥测数据,Function App完成SignalR广播操作
- Unity客户端
OnConnected/OnDisconnected事件触发正常,但OnTelemetryMessage/OnPropertyMessage消息接收事件未触发 - 已确认SignalR消息的Target与客户端预期一致(
PropertyMessage或TelemetryMessage) - 客户端无任何报错信息
可能遗漏的问题点
- 遥测数据结构不匹配:原模拟器输出的遥测数据字段名、数据类型(如数值格式、命名大小写)与MXChip设备上报的数据可能存在差异,导致Function App转发的消息无法被Unity客户端的解析逻辑识别。需对比两者的数据结构,确保字段完全一致。
- 序列化/反序列化逻辑不一致:检查Function App的消息序列化配置(如JSON库、命名规则转换)是否与Unity客户端的反序列化逻辑匹配。例如是否存在驼峰/帕斯卡命名的转换差异,或使用了不兼容的JSON序列化库。
- 客户端订阅时机错误:确认消息订阅操作是在
OnConnected回调内部执行,确保SignalR连接建立完成后再监听消息。若订阅时机过早,可能导致连接完成后未正确注册监听事件。 - SignalR广播范围问题:检查Function App是否将消息广播到了正确的Hub分组。原示例可能使用了特定分组,替换数据源后若遗漏分组指定,客户端所在分组将无法收到消息。
- 版本兼容性问题:验证Unity端SignalR客户端版本与Azure SignalR服务、Function App中使用的SignalR SDK版本是否兼容,版本不匹配可能导致消息解析失败。
- 消息过滤逻辑遗漏:检查Unity客户端是否存在设备ID过滤逻辑,若MXChip设备ID与原模拟器ID不一致,可能导致消息被过滤丢弃。
相关代码及日志
代码片段
Unity SignalR客户端代码
using Microsoft.AspNetCore.SignalR.Client; // ... [客户端代码]
Unity场景数据处理器代码
using Microsoft.Unity; // ... [场景数据处理器代码]
Azure Function App代码
using System.Collections.Generic; // ... [服务器Function App代码]
Azure广播日志
2022-09-07T13:47:07.878 [Information] Executing 'broadcast'...[Azure广播日志]
内容的提问来源于stack exchange,提问作者Sergio Solorzano
相关产品推荐
相关产品推荐

