首页 > 其他分享 >Signalr断线重连机制

Signalr断线重连机制

时间:2023-10-19 10:45:22浏览次数:22  
标签:断开 err hubConnection Signalr connection 断线 重连 链接

前言

Signalr 即时消息发布到服务器后发现链接老是自动断开,导致无法发送广播
后面百度搜了一下,signalr有个超时的机制

 

解决办法(js)

  1. //链接到自己的hub
  2.  var connection = new signalR.HubConnectionBuilder().withUrl("/SignalR/chatHub").build();
  3.  
  4.  //重连方法
  5. const startSignalRConnection = connection => connection.start()
  6.     .then(() => console.info("重连成功!"))
  7.     .catch(err =>
  8.         //  console.error('SignalR Connection Error: ', err)
  9.         layer.alert("即时消息链接已断开,请重新刷新页面"));
  10.  
  11. //启动链接
  12. async function start() {
  13.     try {
  14.         await connection.start().then(function () {
  15.         }).catch(function (err) {
  16.             return console.error(err.toString());
  17.         });
  18.         console.log("connected");
  19.     } catch (err) {
  20.         console.log(err);
  21.         setTimeout(() => start(), 5000);
  22.     }
  23. };
  24. start();
  25. //设置超时时间(30分钟超时)
  26. connection.serverTimeoutInMilliseconds = 30 * 60 * 1000;
  27. //超时时间过了之后会自动断开链接
  28. //链接断开,尝试重连
  29. connection.onclose(() => setTimeout(startSignalRConnection(connection), 5000));

只需要在断开的时候重连就行了

后端同样也有链接断开,连接中,链接成功的回调,根据需要选择
一般重连在前端展示就行

后端的代码(C#)

  1.             //指定重连间隔:0s,0s,10s
  2.             HubConnection hubConnection = new HubConnectionBuilder()
  3.                 .WithUrl(new Uri("http://localhost/chathub"))
  4.                 .WithAutomaticReconnect(new[] { TimeSpan.Zero, TimeSpan.Zero, TimeSpan.FromSeconds(10) })
  5.                 .Build(); 
  6.             HubConnectionBuilder hubConnectionBuilder = new HubConnectionBuilder(); 
  7.             //重连
  8.             hubConnectionBuilder = (HubConnectionBuilder)hubConnectionBuilder
  9.                .WithAutomaticReconnect();
  10.             //创建连接对象
  11.             hubConnection = hubConnectionBuilder.Build();
  12.             //断开连接
  13.             hubConnection.Closed += async (exception) =>
  14.             {
  15.             /   await Task.Delay(0);
  16.             };
  17.             //重连中
  18.             hubConnection.Reconnecting += async (exception) =>
  19.             {
  20.                 await Task.Delay(0);
  21.             };
  22.             //重连成功
  23.             hubConnection.Reconnected += async (exception) =>
  24.             {
  25.                 await Task.Delay(0);
  26.             };
  27.             //心跳检查
  28.             hubConnection.KeepAliveInterval = TimeSpan.FromSeconds(60);

按需求选则前端或后端代码

标签:断开,err,hubConnection,Signalr,connection,断线,重连,链接
From: https://www.cnblogs.com/houxianzhou/p/17774173.html

相关文章

  • springboot连接rabbitmq网络异常时,不能自动重连的问题
    在rabbitmq官网的javaapi处:https://www.rabbitmq.com/api-guide.html#recovery介绍了java连接rabbitmq异常恢复的问题。其中提及了如下内容Asofversion4.0.0oftheJavaclient,automaticrecoveryisenabledbydefault(andthustopologyrecoveryaswell).也就是......
  • C# M2Mqtt组件连接失败后占用大量cpu不释放以及重复用一个client进行重连会出现假连接
    M2Mqtt是C#的一个mqtt客户端库,这个库很好用,但是它有严重的Bug当我们调用Connect建立连接时,如果身份认证失败,它会返回状态码3,即"连接已拒绝,不合格的客户端标识符",但是其内部的异步线程并不会终止,依然会占用大量的cpu资源,即使Disconnect且把client置为null也没用,除非彻底关闭程序......
  • C# Socket 心跳重连
    //需要引用  SuperSocket.ClientEngine 1usingSuperSocket.ClientEngine;2usingSystem;3usingSystem.Collections.Generic;4usingSystem.Linq;5usingSystem.Text;6usingSystem.Net;7usingSystem.Threading.Tasks;89namespaceaaa......
  • vue2 + websocket 断线重连 + 实时数据
    一、websocket事件-1打开事件Socket.onopen连接建立时触发-2消息事件Socket.onmessage客户端接收服务端数据时触发-3错误事件Socket.onerror通信发生错误时触发-4关闭事件Socket.onclose连接关闭时触发二、webs......
  • Nginx配置文件中,如何配置启用SignalR
    以下内容包含为SignalR启用WebSocket、ServerSentEvents和LongPolling所需的最低设置:http{map$http_connection$connection_upgrade{"~*Upgrade"$http_connection;defaultkeep-alive;}server{listen80;server_nameexample.com*.......
  • flv.js的追帧、断流重连及实时更新的直播优化方案
    1.前言最近在处理前端直播的业务,根据业务需要,使用flv.js的方案播放实时的flv视频流。不得不承认,flv.js是一个伟大的库。在使用flv.js开发的过程中,遇到了一些问题,也无外乎是视频延迟,视频卡顿等问题,经过在githubissues里摸爬滚打,加上长时间的试错,将这些问题归纳出了对应的解......
  • EarthChat SignalR原理讲解
    SignalR原理讲解SignalR是什么?SignalR是Microsoft开发的一个库,用于ASP.NET开发人员实现实时web功能。这意味着服务端代码可以实时地推送内容到连接的客户端,而不需要客户端定期请求或轮询服务器以获取新数据。SignalR可以用于各种应用程序,如实时聊天、通知、实时数据更新......
  • 基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯
    基于ASP.NETCoreSignalR可以实现客户端和服务器之间进行即时通信。本篇随笔介绍一些SignalR的基础知识,以及结合对SqlSugar的开发框架的支持,实现SignalR的多端处理整合,从而实现Winform客户端,基于Vue3+ElementPlus的BS端整合,后面也可以实现对移动端的SignalR的整合通讯。适合Sign......
  • C# SignalR使用
    SignalR简介SignalR是一个开源的库,跨平台;让Web应用与其他应用通讯变得很简单,Web服务端可以实时的将内容推送给对应的客户端,客户端发送的信息也可以实时到其他客户端。SignalR提供了一种远程过程调用(RPC)的方式,使得客户端可以调用服务器的方法,同样在服务器端的方法中也能调用客......
  • webScoket重连机制,心跳机制
    webScoket可以实时获取数据,做到实时渲染的效果,但ws一直连接着还好,万一网络波动,断了呢。。。。那只能刷新页面,重新连接,但又不晓得啥时候断了,这时候就要用到心跳机制,对ws进行监视//WebSocket连接地址constwsUrl=ref('')//Ws实例constws=ref()onMounted(()=>{......