基于spring reactor3构建的即时通讯api。
Posted 陆陆起飞啦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于spring reactor3构建的即时通讯api。相关的知识,希望对你有一定的参考价值。
技术栈
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机制(还未实现)
快速开始
- 服务端
ServerStart .builder() .tcp() .ip("127.0.0.1") .port(1888) .interceptor(frame -> frame,frame -> frame) .setAfterChannelInit(channel -> {// channel设置 }) .connect() .cast(TcpServerSession.class) .subscribe(session->{ session.addGroupHandler(groupId -> null).subscribe(); // 设置群组管理handler session.addOfflineHandler(new DefaultOffMessageHandler()).subscribe(); // 设置离线消息handler session.addUserHandler(new DefaultUserTransportHandler()).subscribe(); // 设置用户关系管handler });
- 客户端
ClientStart .builder() .tcp() .ip("127.0.0.1") .port(1888) .userId("21344") .onReadIdle(10000l,()->()->System.out.println("心跳了")) .setClientType(ClientType.ios) .setAfterChannelInit(channel -> { // channel设置 }) .connect() .cast(TcpClientSession.class) .subscribe(session->{ session.sendPoint("123","测试一下哦").subscribe(); // session 操作类 });
以上是关于基于spring reactor3构建的即时通讯api。的主要内容,如果未能解决你的问题,请参考以下文章
一款Java开源的Spring Boot即时通讯IM聊天系统
基于openfire+smack即时通讯instant message开发
分享基于Android系统的XMPP即时通讯技术项目实战(仿微信开发架构,自定义控件)
基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.2版已发布