一个开源即时通讯源码

一个开源即时通讯源码

目前已经含服务端、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的消息格式或者自定义都可以实现。作为程序开发,消息格式简单是挺好,也不怕复杂,就怕没规律。

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

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

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

相关文章

使用map类型的参数在mapper.xml中使用案例

使用map类型的参数在mapper.xml中使用案例 简介&#xff1a;在常见的开发中&#xff0c;对于参数的装载一般使用map类型方式&#xff0c;这样可以避免创建很多参数实体类&#xff0c;不管嵌套多层的数据参数都可以通过map拿取&#xff0c;对于嵌套多层的map&#xff0c;我们需…

day-33 收集垃圾的最少总时间

思路 利用一个二维数组&#xff08;数组行数为3&#xff0c;分别对应三种垃圾&#xff09;记录垃圾数量&#xff0c;arr[0][i]表示第i个房子的金属、纸和或玻璃垃圾。 解题方法 将三种垃圾数量&#xff08;值与时间相同&#xff09;相加&#xff0c;最后对应垃圾车最远需要走到…

stm32f103c8t6之4x4矩阵按键

基于普中精灵开发板 1、矩阵按键原理 当我们需要使用较多的按键时&#xff0c;单片机的IO口可能不够用,这是就需要使用矩阵按键。 对应IO口如下&#xff1a; 步骤解析&#xff1a; 1、全部按键都没有按下时&#xff0c;全行IO为低电平&#xff08;全列对应的IO设置为下拉低…

免费SSL证书有效期现状

自2024年4月25日起&#xff0c;腾讯云上申请的免费SSL证书有效期将从原先的12个月调整为3个月。而在其他平台&#xff0c;比如Gworg&#xff0c;已经有策略表明将停止签发1年期的免费SSL证书&#xff0c;转而仅提供有效期为3个月的证书。 目前&#xff0c;免费SSL证书的有效期…

docker(三):常用命令

0、启动命令 1、启动docker systemctl start docker2、停止docker systemctl stop docker3、重启docker&#xff1a; systemctl restart docker4、查看docker状态 systemctl status docker5、开机启动&#xff1a; systemctl enable docker6、查看docker概要信息 docker…

综合能力 | 误差 | 学习笔记

误差指真值与观测值的差值。 误差分为系统误差&#xff08;消除方法&#xff1a;观测方法、仪器校正、修正等&#xff09;、偶然误差&#xff08;符合正态分布规律&#xff0c;进行计算纠正&#xff09;、粗差&#xff08;一般舍弃&#xff09;。 中误差&#xff08;均方差或标…

代码随想录算法训练营第二十天:二叉树成长

代码随想录算法训练营第二十天&#xff1a;二叉树成长 110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝…

内容安全(AV)

防病毒网关&#xff08;AV&#xff09;简介 基于网络侧 识别 病毒文件&#xff0c;工作范围2~7层。这里的网关指的是内网和外网之间的一个关口&#xff0c;在此进行病毒的查杀。在深信服中就有一个EDR设备&#xff0c;该设备就是有两种部署&#xff0c;一个部署在网关&#xf…

mybatisPlus一个事务中切换数据源概述

概述 在多数据源的配置下&#xff0c;业务中经常遇到在一个被本地事务包裹的save/edi方法中需要查询另一个数据源的数据&#xff1b; 直接查询会提示table不存在&#xff0c;这是因为一个事务和一个mysql连接是绑定的&#xff0c;mysql的连接背后包含了数据库信息&#xff0c;…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目录 关键词平台说明一、ORTI概述二、ORTI文件的生成三、ORTI文件的导入四、Trace 功能4.1 Trace 功能菜单介绍4.2 Trace功能的配置4.3 Trace MCDS 设置4.4 Task Switches断点的设置4.5 Trace 数据的录取4.6 CPU 负载和Task调度的查看 关键词 嵌入式、C语言、autosar、OS、BSW…

如何禁止打开PDF文件?推荐2种方法!

在工作中&#xff0c;我们经常会使用到PDF文件&#xff0c;对于重要的文件&#xff0c;不想被随意打开怎么办呢&#xff1f;下面小编分享2个方法&#xff0c;第二个很实用&#xff0c;记得收藏起来&#xff01; 方法1&#xff1a;设置密码保护 我们可以通过PDF编辑器&#xff…

人脸识别之bbox【det_10g】-ncnn(c++)

模型描述 det_10g是insightface 人脸框图和人脸关键点的分类&#xff0c;最终能够得到人脸框图bbox&#xff0c;分值还有人脸五官&#xff08;眼x2、鼻子x1、嘴巴x2&#xff09; 由于我这里没有采用最终结果&#xff0c;通过onnx转换为ncnn&#xff0c;所以后面的步骤结果丢弃…