前言

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

解决办法(js)

//链接到自己的hub
var connection = new signalR.HubConnectionBuilder().withUrl("/SignalR/chatHub").build(); //重连方法
const startSignalRConnection = connection => connection.start()
.then(() => console.info("重连成功!"))
.catch(err =>
// console.error('SignalR Connection Error: ', err)
layer.alert("即时消息链接已断开,请重新刷新页面")); //启动链接
async function start() {
try {
await connection.start().then(function () {
}).catch(function (err) {
return console.error(err.toString());
});
console.log("connected");
} catch (err) {
console.log(err);
setTimeout(() => start(), 5000);
}
};
start();
//设置超时时间(30分钟超时)
connection.serverTimeoutInMilliseconds = 30 * 60 * 1000;
//超时时间过了之后会自动断开链接
//链接断开,尝试重连
connection.onclose(() => setTimeout(startSignalRConnection(connection), 5000));

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

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

后端的代码(C#)

            //指定重连间隔:0s,0s,10s
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl(new Uri("http://localhost/chathub"))
.WithAutomaticReconnect(new[] { TimeSpan.Zero, TimeSpan.Zero, TimeSpan.FromSeconds(10) })
.Build();
HubConnectionBuilder hubConnectionBuilder = new HubConnectionBuilder();
//重连
hubConnectionBuilder = (HubConnectionBuilder)hubConnectionBuilder
.WithAutomaticReconnect();
//创建连接对象
hubConnection = hubConnectionBuilder.Build();
//断开连接
hubConnection.Closed += async (exception) =>
{
/ await Task.Delay(0);
};
//重连中
hubConnection.Reconnecting += async (exception) =>
{
await Task.Delay(0);
};
//重连成功
hubConnection.Reconnected += async (exception) =>
{
await Task.Delay(0);
};
//心跳检查
hubConnection.KeepAliveInterval = TimeSpan.FromSeconds(60);

根据您的需求选则前端或后端代码!!!

Signalr断线重连机制的更多相关文章

  1. ActiveMQ的断线重连机制

    断线重连机制是ActiveMQ的高可用性具体体现之一.ActiveMQ提供failover机制去实现断线重连的高可用性,可以使得连接断开之后,不断的重试连接到一个或多个brokerURL. 默认情况下 ...

  2. Netty(六):Netty中的连接管理(心跳机制和定时断线重连)

    何为心跳 顾名思义, 所谓心跳, 即在TCP长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可靠性, 有可 ...

  3. 浅谈IM软件client的断线重连、心跳和长在线

    版权声明:原创文章,未经博主同意禁止转载.欢迎点击头像上方"郭晓东的专栏"查看专栏 https://blog.csdn.net/hherima/article/details/27 ...

  4. 微信小程序使用原生WebSokcet实现断线重连及数据拼接

    以前做小程序为了应急找了个插件去链接WebSokcet,文章传送门. 回过头在新项目中再次使用时出现了些许问题,不一一赘述.遂决定好好用一下原生的WebSokcet. 一.说明 1.小程序原生的Web ...

  5. 正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码)

    1.引言 说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的.顾名思义就是证明是否还活着的依据. 什么场景下需要心跳呢?目前我们接触到的大多是一些基于长连接的应用需要心跳来“ ...

  6. SignalR控制台自托管服务端向web客户端指定用户推送数据,客户端断线重连

    一.前言 SignalR是微软推出的开源实时通信框架.其内部使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式,SignalR会根据客户端和 ...

  7. Netty学习篇④-心跳机制及断线重连

    心跳检测 前言 客户端和服务端的连接属于socket连接,也属于长连接,往往会存在客户端在连接了服务端之后就没有任何操作了,但还是占用了一个连接:当越来越多类似的客户端出现就会浪费很多连接,netty ...

  8. Netty 如何实现心跳机制与断线重连?

    作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, ...

  9. 【问题记录】—SignalR连接断线重连

    起因: ASP.NET Core SignalR是一个开源库,可简化向应用添加实时 SignalR Web 功能. 实时 Web 功能使服务器端代码能够立即将内容推送到客户端.(相信大家都用得比较多了 ...

  10. Netty 之 Netty生产级的心跳和重连机制

    https://blog.csdn.net/z69183787/article/details/52625095 最近工作比较忙,但闲暇之余还是看了阿里的冯家春(fengjiachun)的github ...

随机推荐

  1. 封装svg通用组件

    安装vite-plugin-svg-icons插件 pnpm i vite-plugin-svg-icons -D 在main.ts中引入vite-plugin-svg-icons import 'v ...

  2. 使用systemback工具制定Debian.ISO文件

    1.安装systemback https://nchc.dl.sourceforge.net/project/systemback/1.8/Systemback_Install_Pack_v1.8.4 ...

  3. 2024 SemEval 冠军

    SemEval Task10,本质是一个文本分类的任务,有三个子任务,论文摘要如下:在多维对话中,情绪不仅作为情感交流的重要中介者,还承载着丰富的信息.因此,准确识别交流者的情绪并理解情绪变化的触发因 ...

  4. day09-数据格式化&验证以及国际化

    数据格式化&验证以及国际化 1.数据格式化 1.1基本介绍 说明:在我们提交数据(比如表单时),SpringMVC 是怎样对提交的数据进行转换和处理的 基本数据类型可以和字符串之间自动进行转换 ...

  5. window.showModalDialog与opener及returnValue

    首先来看看 window.showModalDialog 的参数 vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatu ...

  6. DWR之入门实例(一)

    DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给 ...

  7. 使用Servlet实现单文件上传

    一位朋友最近在学习JavaWeb开发,开始学习单文件上传操作,他自己尝试着去网上看一些博客教程,能明白其中大概的思路, 还是让我和他说说,如何实现单文单件上传功能.我和他说了一下大致的思路与操作步骤, ...

  8. Dialog源码分析

    目录介绍 1.简单用法 2.AlertDialog源码分析 2.1 AlertDialog.Builder的构造方法 2.2 通过AlertDialog.Builder对象设置属性 2.3 build ...

  9. TorchV的RAG实践分享(二):基于ElasticSearch的混合检索实战&原理分析

    概述 在昨天员外分享的<TorchV的RAG实践分享(1)--RAG的定位.技术选型和RAG技术文章目录>一文中介绍了TorchV的由来,也分享了我们的几个基线产品和应用架构的方向,我们想 ...

  10. 开发必会系列:《Java多线程编程实战》读书笔记

    如何判断是否开启超线程 一  基础 进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程是进程中可独立执行的最小单位. 在Java平台中创建一个线程就是创建一个Thread类(或其子类 ...