一个开源即时通讯源码

一个开源即时通讯源码

目前已经含服务端、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://xiahunao.cn/news/3029780.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于WPF的DynamicDataDisplay曲线显示

一、DynamicDataDisplay下载和引用 1.新建项目,下载DynamicDataDisplay引用: 如下图: 二、前端开发: <Border Grid.Row="0" Grid.Column="2" BorderBrush="Purple" BorderThickness="1" Margin="2"><Grid>…

数据结构学习/复习12

一、排序概念与应用 二、插入排序 三、希尔排序 当间隔数为1时则为插入排序 1.一组一组排 2.多组并排 3.间隔数变化直至为1 四、性能测速代码

【Linux】简易进度条的实现

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

成本降低 90%,出海社交平台 Typing 基于 Databend 的大数据探

Typing&#xff08;输入中科技&#xff09;成立于 2022 年&#xff0c;是一家主要面向东南亚、拉美、中东等海外地区提供社交平台的出海企业。其社交平台类似于国内的 Soul、陌陌等&#xff0c;提供视频直播、语音聊天室、短视频、生活分享、文字聊天等社交功能&#xff0c;注册…

手写一个SPI FLASH 读写擦除控制器(未完)

文章目录 flash读写数据的特点1. 扇擦除SE&#xff08;Sector Erase&#xff09;1.1 flash_se 模块设计1.1.1 信号连接示意图&#xff1a;1.1.2 SE状态机1.1.3 波形图设计&#xff1a;1.1.4 代码 2. 页写PP(Page Program)2.1 flash_pp模块设计2.1.1 信号连接示意图&#xff1a;…

django中的日志处理

1、事件追踪 在什么样的时间发生了什么样的事情 2、bug调试 3、程序告警 4、大数据统计 ELK 日志分析系统 elasticsearh logstasn kibana 名词概念 loggers&#xff1a;日志器 —— 定大方向&#xff1a;1 handlers&#xff1a;处理器 —— 执行:3 formatters&#xff…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文件包含 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

【Python爬虫实战入门】:教你一个程序实现PPT模版自由

文章目录 &#x1f4a5;一、PPT模版爬取&#x1f525;1.1 第一个爬虫&#x1f6b2;1. 获取下载页面链接 ❤️1.2 第二个爬虫&#x1f6b2;1.3 第三个爬虫&#x1f388;2. 文件保存 ❤️1.4 翻页处理 &#x1f525;二、完整代码 &#x1f525;&#x1f525;&#x1f525; Pytho…

Java类加载器介绍

在Java中&#xff0c;类加载器是一种动态加载类的机制&#xff0c;它负责在运行时查找、加载和链接类文件。当Java应用程序需要创建某个类的对象时&#xff0c;类加载器会在运行时查找该类对应的.class文件&#xff0c;并将其加载到Java虚拟机中。Java类加载器通常分为三层&…

JVM调优—减少FullGC

背景 最近负责了一个审批流程新项目&#xff0c;带领了几个小伙伴&#xff0c;哼哧哼哧的干了3个月左右&#xff0c;终于在三月底完美上线了&#xff0c;好消息是线上客户用的很丝滑&#xff0c;除了几个非常规的业务提单之外&#xff0c;几乎没有什么大的问题&#xff0c;但是…

鸿蒙OpenHarmony技术:【Docker编译环境】

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。基于HPM的Docker环…

工作中遇见的问题总结

1. 当我执行下面代码的时候&#xff0c;下边的的代码还是会执行 if(name"aaa"){console.log("111");}

动手学深度学习——多层感知机

1. 感知机 感知机本质上是一个二分类问题。给定输入x、权重w、偏置b&#xff0c;感知机输出&#xff1a; 以猫和狗的分类问题为例&#xff0c;它本质上就是找到下面这条黑色的分割线&#xff0c;使得所有的猫和狗都能被正确的分类。 与线性回归和softmax的不同点&#xff1…

一文彻底读懂信息安全等级保护:包含等保标准、等保概念、等保对象、等保流程及等保方案(附:等保相关标准文档)

1. 什么是等级保护&#xff1f; 1.1. 概念 信息安全等级保护是指根据我国《信息安全等级保护管理办法》的规定&#xff0c;对各类信息系统按照其重要程度和保密需求进行分级&#xff0c;并制定相应的技术和管理措施&#xff0c;确保信息系统的安全性、完整性、可用性。根据等…

通俗的理解网关的概念的用途(四):什么是网关设备?(网络层面)

任何一台Windows XP操作系统之后的个人电脑、Linux操作系统电脑都可以简单的设置&#xff0c;就可以成为一台具备“网关”性质的设备&#xff0c;因为它们都直接内置了其中的实现程序。MacOS有没有就不知道&#xff0c;因为没用过。 简单的理解&#xff0c;就是运行了具备第二…

串口初始化自己独立的见解--第九天

1.SM0,SM1 我们一般用 8位UART&#xff0c;波特率可变 &#xff08;方式1的工作方式&#xff09; SCON &#xff1a;SM2 一般不用&#xff0c;SM0 0 ,SM1 1 PCON : 有两位 我们不动它&#xff0c;不加速&#xff0c;初始值 TMOD&#xff1a;8位自动重装定时器&#xff0…

Linux 安装JDK和Idea

安装JDK 下载安装包 下载地址&#xff1a; Java Downloads | Oracle (1) 使用xshell 上传JDK到虚拟机 (2) 移动JDK 包到/opt/environment cd ~ cd /opt sudo mkdir environment # 在 /opt下创建一个environment文件夹 ls# 复制JDK包dao /opt/environment下 cd 下载 ls jd…

信息系统架构模型_1.单机应用模式和客户机/服务器模式

1.单机应用模式&#xff08;Standalone&#xff09; 单机应用系统是最简单的软件结构&#xff0c;是指运行在一台物理机器上的独立应用程序。这些软件系统&#xff0c;从今天的软件架构上来讲&#xff0c;是很简单&#xff0c;是标准的单机系统。当然至今&#xff0c;这种复杂的…

Blazor入门-基础知识+vs2022自带例程的理解

参考&#xff1a; Blazor 教程 - 生成首个应用 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/intro Blazor基础知识&#xff1a;Visual Studio 2022 中的Blazor开发入门_vs2022 blazor webassembly-CSDN博客 https://blog.csdn.net/mzl87/article/detail…

如何应对Android面试官 -> WindowManagerService 启动流程分析

前言 本章主要从上面几个角度来讲解 WindowManagerService&#xff1b; 相关概念 介绍 WMS 之前&#xff0c;我们先来介绍几个相关的概念&#xff1b; WMS 存在于 system_server 系统服务进程&#xff0c;view 存在于 app 进程&#xff0c;所有的窗口最终都是通过 wms 来进行…