当前位置: 首页 > news >正文

项目-IM

tim-server

tim-server启动类实现CommandLineRunner接口,重写run()方法

run()方法开启一个线程,创建zk持久父节点,创建临时顺序子节点,将netty-server信息写入

1.1 用户登录

1.2 gateway向认证授权中心请求token

1.3 从zookeeper节点里挑选一台netty服务器(策略模式实现,轮询策略通过AtomicLong自增取模,随机策略,)

1.4 将<user_id,netty_ip>路由信息存储在redis

1.5 将token和netty_ip返回给用户

1.6 用户和对应的netty服务器建立连接

1.7 netty服务将客户端的channel保存

2.1 user1给user2发消息,gateway校验token

2.2 从redis查询user2对应的netty_ip

2.3 netty服务根据netty_ip得到netty服务器对象

2.4 通过netty服务器对象和user2得到客户端channel,给user2发消息

空闲检测

客户端15s没有给服务端发消息,会触发写空闲事件,给服务端发送一次心跳

服务端20s没有收到客户端的消息,会触发读空闲事件,如果超过一定时间没有收到心跳包,就删除channel,防止OOM

断线重连

//netty服务器挂了,客户端channel会触发channelInactive事件
@Override
public void channelInactive(ChannelHandlerContext ctx){//用户主动断开,不执行重连逻辑if(shutDownMsg.checkStatus()){return;}//开启一个定时线程,任务是重新通过负载均衡在zk选择一个netty服务器,每10s重连一次scheduledExecutorService.scheduleAtFixedRate(new ReconnectJob(ctx, 0, 10, TimeUnit.SECOND));
}

拆包粘包

自定义包结构 编码器 解码器

可靠性

3.1 客户端返回接收消息成功响应

3.2 发送到消息队列

3.3 
 

相关文章:

项目-IM

tim-server tim-server启动类实现CommandLineRunner接口&#xff0c;重写run()方法 run()方法开启一个线程&#xff0c;创建zk持久父节点&#xff0c;创建临时顺序子节点&#xff0c;将netty-server信息写入 1.1 用户登录 1.2 gateway向认证授权中心请求token 1.3 从zookee…...

2023年口腔医疗行业研究报告

第一章 行业概况 1.1 定义 口腔医疗行业是以口腔医疗服务消费为基础&#xff0c;包含医疗及消费双重属性&#xff0c;是 为满足口腔及颌面部疾病的预防和诊疗、口腔美容等需求提供相关医疗服务的行业。 该行业的主要参与者包括口腔保健专业人员&#xff08;如牙医、口腔外科…...

1Java:JDK是什么

1Java是介于编译型语言和解释型语言之间 编译型语言&#xff1a;c c先编译成机器码&#xff0c;再执行 解释型语言&#xff1a;pytn 解释器直接加载源码运行&#xff0c;但是运行效果低 Java是将代码编译成一张字节码,优点 针对不同平台编写虚拟机&#xff0c;不同平台的虚拟…...

使用 Amazon Lambda 进行无服务器计算:云架构中的一场革命

引言 十年前,无服务器架构还像是痴人说梦。不再如此了! 有了 Amazon Lambda,我们现在可以建构和运行应用程序而不需要考虑服务器。云供应商会无缝地处理所有服务器的供应、扩展和管理。我们只需要关注代码。 这为云部署带来了前所未有的敏捷性、自动化和优化。但是,要发挥它的…...

谨慎使用Lombok的@Builder注解

现在很多程序员都习惯使用Lombok来使代码更加 “简洁”。但是使用Lombok也会造成很多问题&#xff0c;尤其Builder 有个很大的坑&#xff0c;已经见过好几次由于使用Builder注解导致默认值失效的问题&#xff0c;如果测试时没有在意这个问题&#xff0c;就很容易引发线上问题。…...

leetcode455. 分发饼干 【贪心】

题目&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c…...

4V-28V Vin,6A同步降压DCDC变换器,集成3.3V和150mA LDO——SCT2361FPBR

SCT2361是一种高效率的同步降压型DC-DC变换器&#xff0c;集成3.3V和150mA LDO。输入电压范围为4V-28V&#xff0c;输出电压可调为0.6V&#xff0c;具有3mmx3mm的小QFN封装&#xff0c;可提供连续6A的输出电流。该器件将高、低压侧功率mosfet集成&#xff0c;使导通损耗降到最低…...

Linux中的scp指令

在Linux和Unix系统中&#xff0c;scp&#xff08;Secure Copy Protocol&#xff09;是一个用于通过SSH协议进行安全文件传输的命令行实用程序。与传统的cp&#xff08;copy&#xff09;命令不同&#xff0c;scp允许用户在不同的机器之间、或同一台机器的不同位置之间传输文件或…...

剑指 Offer 11. 旋转数组的最小数字

剑指 Offer 11. 旋转数组的最小数字 二分 要注意的是&#xff0c;由于存在重复数字&#xff0c;所以初始状态可能不满足二分的性质。不满足的情况是&#xff1a;左边开始的数字和右边结束的数字相等&#xff0c;所以一开始要缩小右边界&#xff0c;让右边界的数字小于第一个数…...

Redis面试题总结

1.什么是Redis Redis 是一种基于内存的数据库对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、Hash(哈希)、…...

【Eclipse】搭建python环境;运行第一个python程序helloword

目录 0.环境 1.需准备&搭建思路 2.搭建具体步骤 1&#xff09;查看是否安装过python 2&#xff09;安装eclipse 3&#xff09;安装和配置pyDev 3.创建第一个python程序具体步骤 1&#xff09;新建项目 2&#xff09;输入项目名字&#xff0c;和配置选项 3&#x…...

OpenAI 发布企业版ChatGPT-4

OpenAI 发布企业版ChatGPT-4 ChatGPT Enterprise 版本功能ChatGPT Enterprise 对比ChatGPT Enterprise 不同点未来发布计划OpenAI 发布企业版ChatGPT-4 OpenAI 宣布,鉴于ChatGPT的爆炸性成果,推出了针对企业的 ChatGPT Enterprise 版 ChatGPT Enterprise 版本功能 包含所有…...

Flowable7 设计器

1、flowable7 已经在主版本上移除了Flowable UI相关的包&#xff0c;包含bpm-json相关的所有包和流程设计器相关前端文件。 2、flowable7 版本目前只保留了xml运行相关的包&#xff0c;ui modeler已经移除 3、目前官方给的回复是只能在 flowable 云产品上使用设计器&#xff…...

Flutter问题记录 - Unable to find bundled Java version

新版本的Android Studio真的移除了JRE&#xff0c;jre目录找不到&#xff0c;怪不得报错了&#xff0c;不过多了一个jbr目录&#xff0c;找了个以前的Android Studio版本对比 搜了一下jbr&#xff08;JetBrains Runtime&#xff09;&#xff0c;原来IDEA老早就开始用了&#xf…...

Tomcat 日志乱码问题解决

我就是三井&#xff0c;一个永不放弃希望的男人。——《灌篮高手》 Tomcat 日志乱码问题解决 乱码原因&#xff1a;字符编码不一致 如&#xff1a;国内电脑一般都是GBK编码&#xff0c;而Tomcat日志使用的是UTF-8编码 解决方法&#xff1a;将对应字符编码由 UTF-8 改为 GBK 即…...

yum源以及rpm安装包配置、yum源冲突、yum-config-manager命令找不到、curl: (35)、docker镜像重复拉取失败

yum源配置并解决冲突、curl: (35&#xff09;、docker镜像重复拉取失败、yum-config-manager命令找不到的解决方法 有的时候按照教程走&#xff0c;可能会设置yum源&#xff0c;设置后用yum下载东西很有可能或造成冲突 yum源冲突的解决方式无非有两种&#xff1a;1. 删除冲突软…...

ChatGPT和文心一言的优缺点比较

ChatGPT和文心一言都是自然语言生成技术的代表&#xff0c;下面是它们的优缺点比较&#xff1a; ChatGPT的优点&#xff1a; 自由度高&#xff1a;ChatGPT生成的文本与给定的话题没有紧密的关联&#xff0c;可以灵活地生成多种不同的文本。多样性高&#xff1a;ChatGPT可以生…...

⛳ 面试题-单例模式会存在线程安全问题吗?

&#x1f38d;目录 ⛳ 面试题-单例模式会存在线程安全问题吗&#xff1f;&#x1f3a8; 一、单例模式-简介&#x1f69c; 二、饿汉式&#x1f43e; 三、懒汉式&#x1f3af; 3.1、懒汉式&#xff1a;在调用 getInstance 的时候才创建对象。&#xff08;线程不安全&#xff09;&…...

C - 滑动窗口 /【模板】单调队列

Description 有一个长为 n 的序列 a&#xff0c;以及一个大小为 k 的窗口。现在这个从左边开始向右滑动&#xff0c;每次滑动一个单位&#xff0c;求出每次滑动后窗口中的最大值和最小值。 例如&#xff1a; The array is [1,3,−1,−3,5,3,6,7] and k3。 Input 输入一共有…...

工厂人员作业行为动作识别检测算法

工厂人员作业行为动作识别检测算法通过yolov7python深度学习算法框架模型&#xff0c;工厂人员作业行为动作识别检测算法实时识别并分析现场人员操作动作行为是否符合SOP安全规范流程作业标准&#xff0c;如果不符合则立即抓拍告警提醒。Python是一种由Guido van Rossum开发的通…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...