0

我有一个 MXChip,它将数据发送到 Azure IoT Hub,从那里我使用带有 Azure SignalR 绑定的 Azure Function 将设备数据发布到 Azure Signal R。我有一个 Angular 客户端,它将通过调用获取连接信息我使用包创建的 Azure 协商函数@aspnet/signalr

但问题是我的 Angular 客户端每隔几秒钟就会抛出一个错误,当我检查时,我可以理解hubConnection.onclose事件每隔几秒钟就会触发一次。

下面是我的 Angular 服务代码。

export class SignalRService {
    mxChipData: Subject < string > = new Subject();
    private hubConnection: SignalR.HubConnection;

    constructor(private http: HttpClient) {}

    private getSignalRConnection(): Observable < SignalRConnection > {
        return this.http.get < SignalRConnection > (`${environment.baseUrl}negotiate`);
    }

    init() {
        this.getSignalRConnection().subscribe(con => {
            const options = {
                accessTokenFactory: () => con.accessToken
            };

            this.hubConnection = new SignalR.HubConnectionBuilder()
                .withUrl(con.url, options)
                .configureLogging(SignalR.LogLevel.Information)
                .build();

            this.hubConnection.on('notify', data => {
                this.mxChipData.next(data);
            });

            this.hubConnection.start()
                .catch(error => console.error(error));

            this.hubConnection.onclose((error) => {
                console.error(`Something went wrong: ${error}`);
            });
        });
    }
}

有什么办法可以摆脱这种行为?

4

2 回答 2

2

我想出了一个简单的解决方法。具有SignalR.HubConnection属性serverTimeoutInMillisecondskeepAliveIntervalInMilliseconds

serverTimeoutInMilliseconds

服务器超时(以毫秒为单位)。

如果超过此超时时间而没有收到来自服务器的任何消息,则连接将因错误而终止。默认超时值为 30,000 毫秒(30 秒)。

keepAliveIntervalInMilliseconds

ping 服务器的默认间隔。

默认值为 15,000 毫秒(15 秒)。允许服务器检测硬断开连接(例如当客户端拔出他们的计算机时)。

我只是将这些值设置为更大的数字。

this.hubConnection.serverTimeoutInMilliseconds = 300000;
this.hubConnection.keepAliveIntervalInMilliseconds = 300000;

onclose作为临时修复,我们也可以在事件中再次启动 Hub 。

this.hubConnection.onclose((error) => {
    this.hubConnection.start();
    console.error(`Something went wrong: ${error}`);
});
于 2019-01-02T15:33:08.643 回答
0

尝试将 SignalR 服务模式切换为无服务器(或经典)

Azure Portal SignalR 服务模式设置

于 2020-11-14T14:06:15.647 回答