CIM搭建实现发送消息的效果

目录

  • 背景
  • 过程
    • 1、下载代码
    • 2、进行配置
    • 3、直接启动项目
    • 4、打开管理界面
    • 5、启动web客户端实例项目
    • 6、发送消息
  • 项目使用
  • 总结

背景

公司项目有许多需要发送即时消息的场景,之前一直采用的是传统的websocket连接,它会存在掉线严重,不可重连,不支持高并发等缺点,在这样的背景下,急需一款成熟稳定的即时通讯系统。此时发现了一个优秀的开源框架–CIM。CIM是一套基于Netty框架下的推送系统,目前CIM支持websocket,android,ios,桌面应用,系统应用等多端接入支持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用以及后台系统之间的即时消服务。开发者可沉浸于业务开发,不用关心消息通道链接,消息编解码协议等繁杂处理。CIM仅提供了消息推送核心功能,和各个客户端的集成示例,并无任何业务功能,需要使用者自行在此基础上做自己的业务,因此需要你有一定的开发经验。

过程

1、下载代码

https://gitee.com/farsunset/cim.git

在这里插入图片描述

2、进行配置

初始化的时候需要连接数据库和redis,所以首先进行配置。在这里插入图片描述

3、直接启动项目

在这里插入图片描述

4、打开管理界面

在这里插入图片描述

5、启动web客户端实例项目

在这里插入图片描述
在这里插入图片描述

6、发送消息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到这里cim的基本使用方式已经完成。

项目使用

在教师推课切换颗粒的时候,学生应该同步上课进程,和老师端的颗粒保持一致,这需要老师在切颗粒的时候使用cim通知所有在课里边的学生切换颗粒。

我们可以看到上边当我使用cim发消息的时候是调用了一个接口,那在项目中我们使用的时候可以使用restTemplate 接入这个所谓的第三方平台cim的接口,实现发送消息的结果。

在这里插入图片描述

这里和绩效那里接入第三方平台xxljob是类似的,都是借助RestTemplateBuilder 实现响应接口的效果。

总结

该框架是基于主流的Netty框架(Netty的强大已无需多言了),能够保证稳定高效的连接,而且断线重连机制支持的也很好。
易于扩展和使用,并完美支持集群部署支持海量链接,目前支持websocket,android,ios,桌面应用,系统应用等多端接入持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用即时消服务。
用时7年 基于CIM的项目已经运行在全国各个地方,包括上市公司,各地政务系统,警务系统等服务于上百家客户。
该框架是基于当前主流的springboot,并且全面拥抱protobuf,替换json序列化方式,更加高效。
从我自身使用体验来讲,该框架已经很好的解决了我司项目之前掉线严重,不可重连,不支持高并发等缺点。

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

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

相关文章

史上最强47种行业主题小程序模板供你玩耍!赶紧收藏起来!

目录 1.KTV​编辑 2.瓷砖 3.电商女装 4.电商 5.电子产品 6.多商圈 7.发现 8.房产 9.房产建筑 10.服装 11.个人展示 12.公司主题 13.果蔬 14花店 15化妆品 16婚庆 17机械 18家居 19家具 20家政 21教育 22金融 23金属配件 24酒店 25快递 26留守儿童 2…

深入理解数据结构(3):栈和队列详解

文章主题:顺序表和链表详解🌱所属专栏:深入理解数据结构📘作者简介:更新有关深入理解数据结构知识的博主一枚,记录分享自己对数据结构的深入解读。😄个人主页:[₽]的个人主页&#x…

瑞吉外卖实战学习--7、员工信息分页查询

员工信息分页查询 前言1、配置公共分页组件2、创建接口并查看接收的参数3、使用分页构造器并添加查询条件和排序条件4、测试结果 前言 1、配置公共分页组件 package com.example.ruiji_demo.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;…

sharemore少数派提示词或许需要工程,但提问一定需要智慧

Matrix 首页推荐 Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 文章代表作者个人观点,少数派仅对标题和排版略作…

代码随想录算法训练营第二十五天| 216.组合总和III,17.电话号码的字母组合

题目与题解 216.组合总和III 题目链接:216.组合总和III 代码随想录题解:216.组合总和III 视频讲解:和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 解题思路&#xf…

数据结构和算法:图

图 图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。可以将图 𝐺 抽象地表示为一组顶点 𝑉 和一组边 𝐸 的集合。 如果将顶点看作节点&#…

Mongo低版本 count操作进行$in时走了覆盖索引却仍然回表

文章目录 概要一、原因二、解决方法 概要 由于历史原因,一些老项目还在用MongoDB V3.2版本,集群为分片模式,一个客户表数量有15亿左右,昨天监控突然报很多慢查询,如下: db.info.count({domain_id:888,sta…

梦中梦中梦?(梦中梦?)

梦中梦中梦?(梦中梦?) 早上7.40左右起床上厕所(大的)开始自律的一天,上完了刷了会手机,决定再睡一会。在起和睡之间犹豫了几次还是决定睡一会,就开始了这辈子头一次梦中…

算法打卡day22

今日任务: 1)216.组合总和III 2)17.电话号码的字母组合 216.组合总和III 题目链接:216. 组合总和 III - 力扣(LeetCode) 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xf…

配置内网pip源

PIP源(内网) 配置windows配置: pip config set global.index-url http://192.168.102.7:8080/pypi_tsinghua/simple/ pip config set global.trusted-host"192.168.102.7" Linux配置: 编辑pip默认源 mkdir ~/.pip vim ~/.pip/pip.conf 修改内容如…

9.2-源码分析:Dubbo Remoting 层 Buffer 缓冲区

Buffer 是一种字节容器,在 Netty 等 NIO 框架中都有类似的设计,例如,Java NIO 中的ByteBuffer、Netty4 中的 ByteBuf。Dubbo 抽象出了 ChannelBuffer 接口对底层 NIO 框架中的 Buffer 设计进行统一,其子类如下图所示: …

Oracle数据库——子查询五

14.1子查询语法 子查询 (内查询) 在主查询之前一次执行完成。子查询的结果被主查询(外查询)使用 。范例一:谁的工资比 Abel 高? 第一:查询Abel的工资是多少。第二:比较大于这个工资的人数。 注意事项: 子查询要包含在括号内。将子查询放在比较条件的右侧。</

Java集合的基础知识

目录 Java集合的基础知识 JavaArrayList成员方法 Java集合的练习 01-添加字符串并遍历 02-添加数字并遍历 03-添加学生对象并遍历1 04-添加学生对象并遍历2 Java集合的基础知识 JavaArrayList成员方法 在Java中&#xff0c;ArrayList 是一个可调整大小的数组实现&#…

文件名目录名或卷标语法不正确:数据恢复策略与预防措施

一、文件名目录名或卷标语法不正确的现象 在日常使用电脑或移动设备时&#xff0c;我们经常会遇到“文件名目录名或卷标语法不正确”的错误提示。这种错误通常发生在尝试访问、修改或删除文件、目录或卷标时&#xff0c;系统会提示无法完成操作&#xff0c;因为文件名、目录名…

C++格式化输入和输出

格式化输入与输出 除了条件状态外&#xff0c;每个iostream对象还维护一个格式状态来控制IO如何格式化的细节。 格式状态控制格式化的某些方面&#xff0c;如整型值是几进制、浮点值的精度、一个输出元素的宽度等。 标准库定义了一组操纵符来修改流的格式状态。 一个操纵符…

电商系列之商详

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

java解数独(力扣Leetcode37)

数独问题 力扣原题链接 问题描述 数独的解法需遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 数独部分空格内已填入了数字&#xff0c;空白格用.表示。 示例 示例&…

微服务监控:确保分布式系统的可观察性与稳定性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、前言二、微服务监控的重要性三、关键监控指标四、常用监控工具五、最佳实践六、结论 一、前言 在当前的软件开发领域&a…

const在指针中的作用以及*p在各种写法中分别代表什么含义

const在指针中起固定的作用&#xff0c;在不同的写法中其效果也有所区别&#xff0c;具体如下&#xff1a; 1、int* const p固定的是指针p指向的地址。 2、int const *p固定的是指针p指向地址中储存的内容。 例&#xff1a; 以上操作在编译器中执行不了&#xff0c;会报错。…

项目中预览图片时,添加水印,浏览器禁止右键功能、前端禁止直接获取图片地址。(Vue3、TS、canvas)

在src/utils文件夹下新建watermark.ts&#xff0c;写入以下代码块&#xff0c;生成水印文件 // 导出函数 getWatermark&#xff0c;它返回一个对象&#xff0c;其中包含一个名为 watermark 的方法。 export const getWatermark () > {const setWatermark (str: any) >…