当前位置: 首页 > 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开发的通…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...