基于spring reactor3构建的即时通讯api。
欢迎阅读Rmessage文档
技术栈
Rmessage是采用Reactor3,基于reactor-netty项目构建的实时消息推送api。
什么是Reactor3?
Reactor 是一个用于JVM的完全非阻塞的响应式编程框架,具备高效的需求管理(即对 “背压(backpressure)”的控制)能力。它与 Java 8 函数式 API 直接集成,比如 CompletableFuture, Stream, 以及 Duration。它提供了异步序列 API Flux(用于[N]个元素)和 Mono(用于 [0|1]个元素),并完全遵循和实现了“响应式扩展规范”(Reactive Extensions Specification)。
使用Reactor好处?
非常容易构建高吞吐量纯异步的代码,还有就是能够无缝整合spring5[webflux]项目。
项目简介
使用Rmessage你需要外部管理群组用户关系,以及离线消息存储,Rmessage不提供持久化,测试可以使用默认Handler内存保留离线消息。
整个项目采用纯异步的编程思想去开发,旨在学习reactive programming。
目前支持的功能
- 单聊
- 群聊
- 离线消息落地以及拉取
- 离线在线通知管理
- 心跳,连接鉴权机制
- 群组关系管理
- 支持多端在线
- 目前支持tcp协议,项目设计时考虑多协议扩展。
- 支持服务端自定义消息拦截
- 消息QOS机制(还未实现)
快速开始
- 服务端
Rmessage不管理用户群组之间关系,通过接口暴漏外部,只要实现接口注入即可。
ServerStart.builder().tcp().ip("127.0.0.1").port(1888).onReadIdle(10000l) //设置读心跳时间.onWriteIdle(10000l) //设置写心跳时间.option(ChannelOption.SO_RCVBUF,1023).interceptor(frame -> frame,frame -> frame)// 拦截所有message.setAfterChannelInit(channel -> {// channel设置}).connect().cast(TcpServerSession.class).subscribe(session->{session.addGroupHandler(groupId -> null).subscribe();session.addOfflineHandler(new DefaultOffMessageHandler()).subscribe();session.addUserHandler(new DefaultUserTransportHandler());});
具体接口方法定义请参照接口注释
- UserHandler接口是处理用户登陆校验等
- OfflineHandler 是处理离线消息存储,以及拉取离线消息的接口
- GroupHandler 是获取群组下所有用户的接口
- 客户端
ClientStart.builder().tcp().ip("127.0.0.1").port(1888).userId("21344") //设置用户名.password("12312") //设置密码.onReadIdle(10000l,()->()->System.out.println("心跳了"))//设置读心跳,以及设置回调runner.setClientType(ClientType.Ios)//设置客户端类型.setAfterChannelInit(channel -> {// channel设置}).connect().cast(TcpClientSession.class).subscribe(session->{session.sendPoint("123","测试一下哦").subscribe(); //发送单聊消息session.sendGroup("group1","123").subscribe(); // 发送群聊消息session.accept(message -> {}); // 接受所有消息});
Github地址 https://github.com/1ssqq1lxr/Rmessage
转载于:https://www.cnblogs.com/1ssqq1lxr/p/10301474.html
基于spring reactor3构建的即时通讯api。相关推荐
- 基于WebSocket的网页端即时通讯
基于WebSocket的网页端即时通讯 最近项目中需要用到一些即时通讯的相关技术,查阅了一些资料后发现有些示例不是让人很满意,所以博主写了一个demo,就怕以后会忘掉,也方便博友查看. 由于博主用的是 ...
- 基于SpringBoot框架实现的即时通讯App
一.前言 1-1为啥写这篇Blog 期末做期末考核作业,想着基于SpringBoot整合Spring WebSocket做一个即时通讯的APP,为了学习,尽可能的融入多种框架,特别是客户端,使用了ok ...
- spring react_使用Spring WebFlux构建React性REST API –第1部分
spring react 在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API. 在进入React式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及 ...
- spring react_使用Spring WebFlux构建React性REST API –第3部分
spring react 在上一篇文章的续篇中,我们将看到一个应用程序以公开React性REST API. 在此应用程序中,我们使用了 带有WebFlux的Spring Boot 具有响应式支持的Ca ...
- Spring boot + netty开发即时通讯 IM
Spring boot + netty开发即时通讯 IM 目的 github地址 项目目录结构 主要核心类介绍 目的 学习以及开源思想,写一个可使用的IM通信程序 github地址 链接: https ...
- Android基于环信开发的即时通讯APP
Android基于环信开发的即时通讯APP,源代码在Github上,GitHub地址为:https://github.com/PowerDos/BLChat ,希望能够帮到你们,下面是系统简介. 简介 ...
- 基于springboot+h5+websocket的即时通讯客服系统和百度实时语音转译(语音在线识别)
本文章由本人原创 下载链接:https://download.csdn.net/download/u014191624/51948075 这是一个基于springboot+h5+websocket的即 ...
- java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...
- 基于Jabber协议的移动即时通讯系统研究与实现
摘 要 本文利用支持Jabber协议的开源服务器WildFire,在基于J2ME平台的手机上实现了一个移动即时通讯系统,该系统不但具有传统即时通讯的文本信息传递功能,还具备拍照.传递照片.群组聊天 ...
- 基于 Go 语言构建企业级的 RESTful API 服务
现代软件架构已经逐渐从单体架构转向微服务架构,在微服务架构中服务间通信采用轻量级通信机制.对于轻量级通信的协议而言,通常基于 HTTP 和 RPC ,能让服务间的通信变的标准化并且无状态化.此外开发模 ...
最新文章
- ABAP 一个隐藏 selection-screen block的实例
- android 渠道包 占位符配置,Android打包
- 程序运行实例数量的控制
- 【英语学习】【Level 07】U07 Stories of my Life L1 Going to the Countryside
- java序列化_今天聊聊 Java 序列化
- 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...
- 版权 Copyright 和 Phpstorm
- 新手如何快速学习单片机
- 简述RPL, DPL, CPL的区别与联系
- java实现kotlin接口_Kotlin 接口与 Java8 新特性接口详解
- 奥鹏教育计算机应用基础试题及答案,奥鹏计算机应用基础试题及答案.pdf
- 模拟电路与数字电路基础知识及实训QY-DG760A
- 北京少儿python培训视频教程
- 北京东方时尚学车日志
- python判断火车票座位_利用Python实现命令行版的火车票查看器
- CSAPP datalab
- 中企海外周报 | 华为在西班牙启动Wi-Fi 6高校创新应用测试试点;爱奇艺人脸识别技术获全球学术会议认可...
- raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not sup
- GE CimplicityV11.1安装步骤
- (2019,PersEmoN)用于分析表象性格、情绪及其关系的深度网络
热门文章
- AndroidStudio插件GsonFormat快速实现JavaBean
- 线程与进程在内核中的实现
- 贪心 Codeforces Round #303 (Div. 2) B. Equidistant String
- vmware player tools安装
- 【原创】查找原始MySQL死锁ID
- java 通过System.getProperties()获取系统参数
- 基于LVDS的高速自同步串行传输系统的研究
- iOS NSUserDefaults 存放位置
- 解决canvas合成图片大小错误、模糊以及跨域的问题
- 电商购物网站 - 需求与设计