一个开源即时通讯源码

news2024/9/28 15:29:29

一个开源即时通讯源码

目前已经含服务端、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.coloradmin.cn/o/1663148.html

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

相关文章

【XR806开发板试用】试用SWD+Jlink调试

XR806开发板&#xff0c;只能使用编写代码&#xff0c;然后通过UART下载&#xff0c;没法在线debug&#xff0c; 效率会差很多&#xff0c;官方没有提供这一方面的资料。 先查CPU&#xff0c; 官方介绍是arm-china的MC1&#xff0c;通过armv8 Architecture refenence manual资料…

linux打包流程

因为linux有俩个python版本&#xff0c;我们需要切换到python3这个版本&#xff0c;默认是python 2.7 alias pythonpython3 切换到python3 再次执行&#xff1a;python -V 显示出python的版本了&#xff0c;然后查看pip的配置&#xff0c;我们打包里面需要的第三方需要放到pip…

使用IDA自带python patch的一道例题

首先看见就是迷宫 迷宫解出的路径&#xff0c;放在zip的文件可以得到一个硬编码 然后在原程序中&#xff0c;有一处很离谱 这个debugbreak就是IDA分析错误导致的 我们点进去发现里面全是nop 然后我们把我们得到的硬编码放在010里面&#xff0c;再用IDA打开 重新编译看汇编 你…

高性能运营级流媒体服务框架:支持多协议互转 | 开源日报 No.250

ZLMediaKit/ZLMediaKit Stars: 12.6k License: NOASSERTION ZLMediaKit 是一个基于 C11 的高性能运营级流媒体服务框架。 使用 C11 开发&#xff0c;避免裸指针&#xff0c;代码稳定可靠&#xff0c;性能优越。支持多种协议 (RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181 等…

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

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

5/11后面部分:+顺序排序+元素交换+计算每门课程的各种成绩+存放规律的数据 注意:一味的复制肯定要出问题,第2个的最后一部分有修改,注意观察

目录 第一个已经输出过一次&#xff1a; 第二个: 编程实现&#xff1a;程序功能是用起泡法对数组中n个元素按从大到小的顺序进行排序。 ​编辑的确出现了一些问题哦&#xff1a; ​编辑目前是可以运行&#xff0c;但AI不给我们通过&#xff1a; 最后还是我的代码获胜&#x…

苹果电脑怎么安装crossover 如何在Mac系统中安装CrossOver CrossOver Mac软件安装说明

很多Mac的新用户在使用电脑的过程中&#xff0c;常常会遇到很多应用软件不兼容的情况。加上自己以前一直都是用Windows系统&#xff0c;总觉得Mac系统用得很难上手。 其实&#xff0c;用户可以在Mac上安装CrossOver&#xff0c;它支持用户在Mac上运行Windows软件&#xff0c;例…

C++牛客小白月赛题目分享(1)生不逢七,交换数字,幻兽帕鲁

目录 1.前言 2.三道题目 1.生不逢七 1.题目描述 2.输入描述: 3.输出描述: 4.示例&#xff1a; 5.题解&#xff1a; 2.交换数字 1.题目描述&#xff1a; 2.输入描述&#xff1a; ​编辑 3.输出描述&#xff1a; 4.示例&#xff1a; 5.题解&#xff1a; 3.幻兽帕…

开源基金会AtomGit教程

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 注册 点击链接进入官网&#xff0c;先注册&#xff0c;然后登录&#xff1a;https://atomgit.com/ 编辑个人资料&#xff0c;修改一下自己的信息&#xff0c;用户名后面提交代码的时候要…

frida反检测

一、frida介绍 简单来说&#xff0c;Frida是一个动态代码插桩框架。这意味着它能够在程序运行的时候&#xff0c;不改变原有程序代码的情况下&#xff0c;让你往里面添加自己的代码片段。这听起来可能有点像魔法&#xff0c;但实际上&#xff0c;它是通过一种叫做“HOOK”的技术…

解构复合人工智能系统(Compound AI Systems):关键术语、理论、思路、实践经验

编者按&#xff1a; 大模型的出现为构建更智能、更复杂的人工智能系统带来了新的契机。然而&#xff0c;单一的大模型难以应对现实世界中错综复杂的问题&#xff0c;需要与其他模块相结合&#xff0c;构建出复合人工智能系统&#xff08;Compound AI Systems&#xff09;。 本文…

wordpress 访问文章内容页 notfound

解决&#xff1a; 程序对应的伪静态规则文件.htaccess是空的 网站根目录下要有 .htaccess 文件&#xff0c;然后将下面的代码复制进去。 <ifmodule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRew…

AI领域最伟大的论文检索网站

&#x1f4d1; 苏剑林&#xff08;Jianlin Su&#xff09;开发的“Cool Papers”网站旨在通过沉浸式体验提升科研工作者浏览论文的效率和乐趣。这个平台的核心优势在于利用Kimi的智能回答功能&#xff0c;帮助用户快速了解论文的常见问题&#xff08;FAQ&#xff09;&#xff0…

STL-Setmap

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;我们将进入到CSTL 的学习。STL在各各C的头文件中&#xff0c;以源代码的形式出现&#xff0c;不仅要会用&#xff0c;还要了解底层的实现。源码之前&#xff0c;了无秘密。 STL六大组件 Container通过Allocator取得数据储存…

多标签分割

https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/configs/multilabelseg/README_cn.md

el-select选项框内容过长

利用popper-class实现选项框内容过长&#xff0c;截取显示功能&#xff1a; <el-select popper-class"popper-class" :popper-append-to-body"false" v-model"value" placeholder"请选择"><el-optionv-for"item in opt…

大模型prompt实例:知识库信息质量校验模块

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

war包放在tomcat服务器中,服务启动之后war包并没有正常展开如何解决?

这里我问题出现的是 XWiki 的 WAR 包未能自动展开&#xff0c;于是尝试手动解压并部署。下面是手动解压 WAR 包的步骤思路展示&#xff1a; 1. 准备目录 首先&#xff0c;创建一个新的目录用于存放解压后的文件。在 webapps 目录中创建一个名为 xwiki 的目录&#xff1a; mkd…

webjars学习

webjars介绍 官网&#xff1a;WebJars - Web Libraries in Jars github: WebJars GitHub 文档&#xff1a;WebJars - Documentation WebJAR 是一个用于管理Web前端依赖的工具。它允许开发者将特定的客户端库&#xff08;如JavaScript、CSS等&#xff09;打包成JAR&#xf…

【打工日常】云原生之搭建一款轻量级的开源Markdown笔记工具

一、flatnotes介绍 1.flatnotes简介 一个自托管的&#xff0c;无数据库的笔记网络应用程序&#xff0c;利用平面文件夹的markdown文件进行存储。 2.项目特点 A.干净简单的用户界面B.响应式移动端界面C.原生/所见即所得Markdown编辑模式D.高级搜索功能E.笔记“标签”功能F.…