项目-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 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在windows上安装Cmake软件

Cmake是一个跨语言、跨平台、开源的编译工具&#xff0c;可以编译C、C、Note.js、JavaScript、C#、Java、Python、Php、Object-C、Ruby等工程&#xff0c;需要设置对应的src源码目录、ext第三方依赖目录、CMakeList.txt构建列表&#xff0c;再使用cmake命令即可。     2023年…

程序员自由创业周记#2:前期准备

感恩 上次公开了创业的决定后&#xff0c;得到了很多亲朋好友和陌生朋友的鼓励或支持&#xff0c;以不同的形式&#xff0c;感动之情溢于言表。这些都会记在心里&#xff0c;大恩不言谢~ 创业方向 笔者是一名资质平平的iOS开发程序猿&#xff0c;创业项目也就是开发App卖&am…

Jmeter(二十九):Jmeter常用场景梳理

一、每秒钟固定调用次数 如果想控制每秒发送请求数量,仅仅通过线程数与循环次数是不够的,因为这只能控制发送总数,而要控制每秒发送数量,需要线程数与常数吞吐量控制器的搭配使用,这种场景在性能测试中使用不多。 例如每秒钟调用30次接口,那么把线程数设置为30,将常数…

Netty-ChannelPipeline

EventLoop可以说是 Netty 的调度中心&#xff0c;负责监听多种事件类型&#xff1a;I/O 事件、信号事件、定时事件等&#xff0c;然而实际的业务处理逻辑则是由 ChannelPipeline 中所定义的 ChannelHandler 完成的&#xff0c;ChannelPipeline 和 ChannelHandler应用开发的过程…

高教社杯数模竞赛特辑论文篇-2012年A题:葡萄酒的评价(附获奖论文)

目录 摘 要 一、问题重述 二、问题分析 2.1 问题一的分析 2.2 问题二的分析

SMT制造中的产品质量检验和管理

SMT制造中的质量检验和产品物料管理都是实现高质量、低成本、高效益的重要方法。在SMT加工的过程中&#xff0c;产品质量的检验和质量把控都是重中之重&#xff0c;可以有效的降低产品不良率及返修等造成制造成本升高的风险问题&#xff0c;今天就来跟大家讨论一下SMT制造中我们…

C语言(第三十三天)

3.1.2 画图推演 3.2 举例2&#xff1a;顺序打印一个整数的每一位 输入一个整数m&#xff0c;打印这个按照顺序打印整数的每一位。 比如&#xff1a; 输入&#xff1a;1234 输出&#xff1a;1 2 3 4 输入&#xff1a;520 输出&#xff1a;5 2 0 3.2.1 分析和代码实现 这个题目&a…

数据结构--队列与循环队列

队列 队列是什么&#xff0c;先联想一下队&#xff0c;排队先来的人排前面先出&#xff0c;后来的人排后面后出&#xff1b;队列的性质也一样&#xff0c;先进队列的数据先出&#xff0c;后进队列的后出&#xff1b;就像图一的样子&#xff1a; 图1 如图1&#xff0c;1号元素是…

Harbor查看密码

已经登录过的harbor 查看密码 cat /root/.docker/config.json {"auths": {"172.28.120.140": {"auth": "YWRtaW43QDIwMTg"}}使用base64解码

Router和Route

Router是一个Web框架中的组件&#xff0c;用于处理HTTP请求&#xff0c;并将其路由到相应的处理程序。在不同的Web框架中&#xff0c;Router的实现方式可能会有所不同&#xff0c;但通常都会包括以下几个部分&#xff1a; URL解析器&#xff1a;用于解析HTTP请求中的URL&#x…

CS420 课程笔记 P1 - 游戏逆向课程介绍

文章目录 笔记前言IntroductionPrerequisitesSkills you will learn Additional TopicsComputer ScienceUniversal ProcessDemystifying Computers 笔记前言 文章的标题根据油管自动生成进行分类&#xff0c;方便对应视频进行定位 笔记根据 Guided Hacking 发布的 CS420 课程完…

本地开机启动jar

1&#xff1a;首先有个可运行的jar包 本地以ruiyi代码为例打包 2&#xff1a;编写bat命令---命名为.bat即可 echo off java -jar D:\everyDay\test\RuoYi\target\RuoYi.jar 3&#xff1a;设置为开机自启动启动 快捷键winr----输入shell:startup---打开启动文档夹 把bat文件复…

春秋云镜 CVE-2018-16283

春秋云镜 CVE-2018-16283 WordPress Plugin Wechat Broadcast LFI 靶标介绍 WordPress Plugin Wechat Broadcast LFI 启动场景 漏洞利用 exp # Exploit Title: WordPress Plugin Wechat Broadcast 1.2.0 - Local File Inclusion # Author: Manuel Garcia Cardenas # Date:…

Spring boot 第一个程序

新建工程 选择spring-boot版本 右键创建类TestController&#xff1a; 代码如下&#xff1a; package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springf…

Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)

Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN) 来源&#xff1a; KDD’2023Google Research 文章目录 Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)长尾问题分析CDNItem Memorization and General…

非科班如何流畅转码进入计算机领域?

近年来&#xff0c;许多人都抱着梦想跨足计算机领域&#xff0c;尽管他们并非计算机科班出身。对于这个野心勃勃的群体&#xff0c;如何实现丝滑转码成为了一个备受瞩目的话题。本文将深入探讨这个问题&#xff0c;为你呈现一些实用的建议&#xff0c;帮助你在这个挑战充满机遇…

《存储IO路径》专题:NVME盘加载的过程

在深入了解NVMe&#xff08;NVM Express&#xff09;SSD&#xff08;固态硬盘&#xff09;在Linux系统的加载过程之前&#xff0c;让我们先听一个引人入胜的故事。 在未来的世界里&#xff0c;时间不再是线性流动的&#xff0c;而是呈现出多维度交织的形态。在这个世界中&…

C# 实现PictureBox从随机选择的文件夹内对图像进行随机播放

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System

是否在业务中使用大语言模型?

ChatGPT取得了巨大的成功&#xff0c;在短短一个月内就获得了1亿用户&#xff0c;并激发了企业和专业人士对如何在他们的组织中利用这一工具的兴趣和好奇心。 但LLM究竟是什么&#xff0c;它们如何使你的企业受益?它只是一种炒作&#xff0c;还是会长期存在? 在这篇文章中我…

MPI内置类型与自定义类型

内置类型 MPI_CHAR: 字符型 MPI_UNSIGNED_CHAR: 无符号字符型MPI_BYTE: 字节型MPI_SHORT: 短整型MPI_UNSIGNED_SHORT: 无符号短整型MPI_INT: 整型MPI_UNSIGNED: 无符号整型MPI_LONG: 长整型MPI_UNSIGNED_LONG: 无符号长整型MPI_FLOAT: 单精度浮点型MPI_DOUBLE: 双精度浮点型M…