一个开源即时通讯源码

一个开源即时通讯源码

目前已经含服务端、PC、移动端即时通讯解决方案,主要包含以下内容。

服务端简介
不要被客户端迷惑了,真正值钱的是服务端, 服务是采用Java语言开发,基于spring cloud微服务体系开发的一套即时通讯服务端。 从单机到微服务都提供了可部署方案,并且单机、微服务都可以平滑切换,客户端可以毫无感知服务变更

特点
oim-server 可以让你像spring mvc一样开发即时通讯接口,对于有web后台开发经验,没用即时通讯服务端经验开发者,可以 轻松转换,并且兼容spring web接口。如下示例

请求接口

@RestController
public class UserController {

	/**
	 * 
	 * 登录<br>
	 * Date  12:26:38<br>
	 * 
	 * @param user
	 * @since 1.0.0
	 */
	@ActionMapping(value = "/user/login") // 此路同样可以用http post请求
	public User login(
			@Define("body.user") User user) { // "body.user"(此body是json内的body字段,不是http协议的body) 
			                                  // 是http或者tcp中的消息体json属性路径{"body":{"user":{}}}
		// ...省略实现内容
		return user;
	}
}
目录说明
|__oim-server-run # Java服务
    |__cloud #微服务运行版
        |__common #公共依赖的jar
            |__oim-server-element-basic-* #这些是单机和微服务都依赖部分,含一些抽象定义,微服务和单机有不同实现
            |__oim-server-element-cloud-* #这些是微服务所需的依赖,针对微服务的一些实现
        |__service #每个运行的微服务
            |__core #主要是技术管理类型微服务 如:注册中心、网关等
                |__action #收集所有服务的接口地址,这样网关可以无需配置服务名,直接通过接口地址访问到对应的服务
                |__admin #只是集成了spring boot admin
                |__center #注册中心
                |__gateway #网关
            |__net #即时通讯的TCP、WebSocket等长连接服务
                |__control 用于管理(net-work)用户客户端长连接服务
                |__work 用户客户端长连接服务
            |__support #公共支持服务 如:文件上传
                |__file
            |__system #针对整个系统的配置、共数据等
                |__setting #
            |__work #业务服务(因为business太长了,还有其他地方容易用到这个名字)
                |__chat #聊天业务
                |__contact #联系人
                |__core #核心:用户
                |__group #群
                |__portal #服务地址入口
    |__single #单机版
        |__oim-server-single-main # 因为单机和微服务的功能模块是共用的,这里是针对一些抽象的单机实现
        |__oim-server-single-running #启动服务配置
|__oim-server-web # Vue 后台管理界面

依赖说明

首先说明,oim-server中不管是个人封装框架还是第三方框架,均为开源框架。其中aware-xxx和wofa-server-xxx、only-xxx都是个人所封装的 框架或者技术工具,部分已经发布maven中央库。 oim-server最初业务代码和网络框架有一定的耦合,后面oim的目标是能做成既能现成使用,又能成为框架,并且尽量不要限制技术框架 所有oim-server拆分成了多个模块。 其中wofa-server-xxx是我对即时通讯的封装,也是它能实现如mvc一般写接口,

OIM开发说明
1、环境要求:

JDK 1.8.0_xxx
DB 支持MySQL Oracle SQL server  推荐MySQL 8.0

微服务还需以下:

Redis 
RabbitMQ

2、关于微服务版和单机版使用
微服务版的业务代码和单机版业务代码是共用的,所以业务模块均在微服务目录下。只是在IM长连接等处理上有区别,所以单机和微服务需要不同处理的
地方抽象成接口,在不同启动服务中各自实现

3、关于部分依赖下载不下来
因为部分依赖尚未发布到maven中央库,而是在我的私库中,所以maven全局配置文件(通常在用户目录下.m2/setting.xml)中不能配置
镜像服务(<mirrors></mirrors>中部分注释或者删掉)
私库maven配置项目中已经配置

4、关于数据库脚本
只要先创建好数据库,修改数据库配置、启动自动创建表。目前默认H2数据库创建表有问题,推荐使用MySQL 8.0

在开源项目或者市面上,所发现的即时通讯开源项目多半是要么自定义协议,要么是XMPP。XMPP基于xml现在用起来可以说 有点难用了。其他私有协议多半是json格式,oim也是json格式。不过基本上原理是通过一个字段作为如cmd,分别 1、2、3、4 来表示什么接口。写的一般的通过if else执行不同方法,有些封装的好些的用了策略模式等。这些消息格式是挺简单的, 通俗易懂。简单功能开发也很快。但接口越来越多,功能越来越复杂。未必好维护、好扩展。 wofa参考了spring mvc 将tcp消息采用类似spring mvc的方式处理。本质上虽然和上述cmd 1、2、3没啥区别,但是wofa给了默认实现也给了自由扩展 不管是不是既采用oim的消息格式或者自定义都可以实现。作为程序开发,消息格式简单是挺好,也不怕复杂,就怕没规律。

客户端截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为eNSP学习—IP编址

IP编址 IP编址子网划分例题展示第一步:机房1的子网划分第二步:机房2的子网划分第三步:机房3的子网划分IP编址 明确:IPv4地址长度32bit,点分十进制的形式 ip地址构成=网络位+主机位 子网掩码区分网络位和主机位 学此篇基础: ①学会十进制与二进制转换 ②学会区分网络位和…

Python批量备份华为设备配置到FTP服务器

Excel表格存放交换机信息&#xff1a; 备份文件夹效果图&#xff1a; Windows系统配置计划任务定时执行python脚本&#xff1a; Program/script&#xff1a;C:\Python\python.exe Add arguments (optional)&#xff1a; D:\Python_PycharmProjects\JunLan_pythonProje…

能源系统升级BACnet IP分布式I/O边缘模块深度整合

能源管理系统(EMS)的高效运行成为了实现绿色建筑、节能减排的关键。而BACnet IP分布式远程I/O模块作为这一系统中的重要组件&#xff0c;正发挥着不可小觑的作用。本文将以某大型商业综合体为例&#xff0c;探讨BACnet IP I/O模块如何在能源管理中大显身手。 商业综合体涵盖办公…

揭秘APP广告变现:轻松赚取额外收入!

在移动应用&#xff08;APP&#xff09;的世界中&#xff0c;变现能力是衡量一个应用成功与否的关键指标之一。无论是个人开发者还是企业团队&#xff0c;如何通过应用创造收入&#xff0c;始终是一个备受关注的话题。今天&#xff0c;我们将深入探讨APP广告变现的路径&#xf…

【ElementUI -- 优化小技巧系列】 -- el-tree 节点内容过长优化 以及选中默认节点

在使用elementui过程中经常碰到关于样式的问题&#xff0c;我曾经很喜欢通过类名修改css样式来做&#xff0c;其实原生封装的elementui库的样式对于普通开发来说已经足够了&#xff0c;通过类名修改css只会让组件臃肿难以维护&#xff0c;现在真的越来越怕写css&#xff0c;经常…

镜舟科技亮相2024中国移动算力网络大会、Qcon、DTC等多项活动

在刚刚过去的 4 月份&#xff0c;镜舟科技受邀参与一系列技术交流活动&#xff0c;与移动云、金科创新社、infoQ、墨天轮、开科唯识等媒体及合作伙伴展开积极交流&#xff0c;并分享其在数据技术、金融等垂直行业领域的创新实践&#xff0c;从产业侧、业务侧、技术侧洞察需求、…

基于springboot+mybatis+vue的项目实战之页面参数传递

如图所示&#xff0c;删除操作可以用按钮实现&#xff0c;也可以用超链接来实现。 1、第一种情况&#xff0c;用按钮实现。 html页面相关&#xff1a; <button type"button" click"deleteId(peot.id)">删除</button> <script>new Vue(…

Redis 支持的 Java 客户端都有哪些?

Redis 是一种高性能的键值存储系统&#xff0c;它以其快速、灵活和可扩展的特性而闻名。在 Java 开发中&#xff0c;与 Redis 交互的方式通常是通过使用 Redis 的 Java 客户端。 这些客户端提供了访问 Redis 数据库的接口&#xff0c;使开发人员能够在 Java 应用程序中轻松地使…

活动报名 | 某头部股份制银行,构建实时指标平台的最佳实践

&#x1f449;欢迎到镜舟科技公众号报名了解研讨会 数字化转型不仅是一场技术革命&#xff0c;更是企业决策模式的革新。在这一过程中&#xff0c;数据成为企业最宝贵的资产&#xff0c;实时数据分析对企业决策至关重要。 随着业务复杂性增加&#xff0c;各业务部门数据指标越…

【概率论基础】 一篇文章缕清概率论常见概念关系

碎碎念&#xff1a;再写CSDN之前有一小段时间写数模公众号的经历&#xff0c;但是公众号看的人实在太少了&#xff0c;而且排版和公式、代码编辑都没有CSDN这么方便&#xff0c;所以坚持一算时间就没有更新了。公众号大多写的是概念性的基础&#xff0c;稍加修改搬到咱们的主战…

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么&#xff1f;2.2 Baidu Comate 支持那…

5到15秒片头音乐200款,30秒片头音效音乐大全

一、素材描述 本套音乐音效素材&#xff0c;大小2.88G&#xff0c;13个压缩文件。 二、素材目录 200个5到15秒的片头音乐.zip 30秒片头-1.zip 30秒片头-2.zip 30秒片头-3.zip 30秒片头-4.zip 30秒片头-5.zip 30秒片头-6.zip 30秒片头-7.zip 30秒片头-8.zip 30秒片头…

海睿思受邀参加 “走进中节能”研习交流,探索新能源数据治理的创新路径

近日&#xff0c;OceanMind海睿思参加由江苏省企业信息化协会&#xff08;以下简称“苏信会”&#xff09;主办的“走进中节能太阳能科技&#xff08;镇江&#xff09;有限公司”研习交流活动。 海睿思与苏美达、远东控股、隆基乐叶、固德威、上能电气等40多位来自制造业领域的…

Unity使用ToggleGroup对多个Toggle进行管理时,初始化默认选项失效的问题

问题描述&#xff1a; 在unity脚本的OnEnable中用代码设置Toggle集合中的其中一个对象的ison时&#xff0c;发现并没有根据设置发生变化。但是该Toggle的OnValueChange却发生过变化。 如果使用协程等待0.01s,那么对应组件的ison的修改才能生效&#xff0c;但是逐帧分析的话会发…

读写备份寄存器BKP与实时时钟RTC

文章目录 读写备份寄存器接线图代码 RTC实时时钟接线图代码 读写备份寄存器 接线图 即接个3.3v的电源到VBT引脚 代码 代码效果&#xff1a;第一次写入备份寄存器&#xff0c;下载程序后再注释掉&#xff0c;再进行下载&#xff0c;之前写入的数据还会保存在备份寄存器中&am…

JavaEE之线程(3)_线程的开始、中断、等待、休眠线程、线程的状态

前言 在本栏的上一节&#xff08;https://blog.csdn.net/2301_80653026/article/details/138500558&#xff09;&#xff0c;我们重点讲解了五种不同的创建线程的方式&#xff0c;我们还介绍了Tread类的常见构造方法和常见属性&#xff0c;在这一节中我们将会继续介绍Tread类。…

【SVN-TortoiseSVN】SVN 的简介与TortoiseSVN 安装使用教程

目录 &#x1f31e;前言 &#x1f30a;1. SVN 的简介 &#x1f30d;1.1 SVN是什么 &#x1f30d;1.2 SVN 工作原理 &#x1f30d;1.3 TortoiseSVN 术语及定义 &#x1f30a;2. TortoiseSVN 安装与汉化 &#x1f30a;3. SVN 基本操作-TortoiseSVN &#x1f30d;3.1 浏览…

在k8s中部署Prometheus并实现对k8s集群的监控

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s简介 2、 Prometheus概述 二、准备k8s环境 1、…

C语言:__attribute__((packed))

一、简介 在使用结构体的时候&#xff0c;经常要根据结构体的长度来进行相关判断。但是按照C语言的规则&#xff0c;会对不同类型的数据类型进行自动对齐。有时候就会造成一些问题&#xff0c;如果不需要使用自动对齐的功能&#xff0c;就需要使用到本章的关键字。 二、自动对…

fabric搭建生产网络

fabric搭建生产网络 一、生成组织结构与身份证书 解包 hyperledger-fabric-linux-amd64-2.5.0.tar.gz 1.1、crypto-config.yaml配置文件 ./bin/cryptogen showtemplate > crypto-config.yaml 将crypto-config.yaml内容修改为&#xff1a; # -------------------------…