欢迎阅读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。

目前支持的功能

  1. 单聊
  2. 群聊
  3. 离线消息落地以及拉取
  4. 离线在线通知管理
  5. 心跳,连接鉴权机制
  6. 群组关系管理
  7. 支持多端在线
  8. 目前支持tcp协议,项目设计时考虑多协议扩展。
  9. 支持服务端自定义消息拦截
  10. 消息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());
});

具体接口方法定义请参照接口注释

  1. UserHandler接口是处理用户登陆校验等
  2. OfflineHandler 是处理离线消息存储,以及拉取离线消息的接口
  3. 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

基于spring reactor3构建的即时通讯api。的更多相关文章

  1. TCP UDP Socket 即时通讯 API 示例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(三)

    IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(三) 后台服务用户与认证 新建一个空的.net core web项目Demo.Chat,端口配置为 ...

  3. IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(二)

    IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(二) IdentityServer4 用户中心生成数据库 上文已经创建了所有的数据库上下文迁移代码 ...

  4. IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(一)

    IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯 前言 .net core 2.1已经正式发布了,signalr core1.0随之发布,是时候写个 ...

  5. 基于SignalR的web端即时通讯 - ChatJS

    先看下效果. ChatJS 是基于SignalR实现的Web端IM,界面风格模仿的是“脸书”,可以很方便的集成到已有的产品中. 项目官网:http://chatjs.net/ github地址:htt ...

  6. 基于Spring Boot构建的Spring MVC快速入门

    原文地址:http://tianmaying.com/tutorial/spring-mvc-quickstart 环境准备 一个称手的文本编辑器(例如Vim.Emacs.Sublime Text)或 ...

  7. websocket(三)——基于node sockit.io的即时通讯

    通过前面的学习发现,常见的websocket虽然可以很好地实现服务端和客户端的信息传递,但二者之间传递的数据只是简单的字符串,这对事物的描述,信息的传递是非常不友好的,下面将引入socket.io,来 ...

  8. Spring Security构建Rest服务-0300-Restful API异常处理

    SpringBoot默认的错误处理机制: 一.测试需要的部分代码 (完整代码放在了github https://github.com/lhy1234/spring-security): UserCon ...

  9. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

随机推荐

  1. storm入门基本知识

    引言 介绍storm之前,我先抛出这两个问题: 1.实时计算需要解决些什么问题? 2.storm作为实时计算到底有何优势? storm简介 官方介绍: Apache Storm is a free a ...

  2. Lambda使用深入解析

    这一次继续对Lambda表达式进行深入,因为它实在太重要了,这次会涉及到java.util.function中的一些新的FunctionalInterface的使用,用它来进一步巩固对Lambda表达 ...

  3. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化

    引言 在数据库存在外键的其情况下,使用select_related()和prefetch_related()很大程度上减少对数据库的请求次数以提高性能 1.实例准备 模型: from django.d ...

  4. 干货 | 以太坊Mist负责人教你建立无服务器应用

    作者:Alex Van de Sande译者:王建/蔡佳慧译者介绍: 王建:万云平台区块链技术专家,拥有多年应用系统架构经验,目前在区块链落地方面进行积极探索 蔡佳慧:万云平台实习生,区块链技术爱好者 ...

  5. 用jquery实现Ping测试网络连接性

    jquery的ping插件://要用的需要明白代码及自己改些地方 (function($) {    $.fn.ping = function(options) {        var opts = ...

  6. Codeforces Round #590 (Div. 3) B2. Social Network (hard version)

    链接: https://codeforces.com/contest/1234/problem/B2 题意: The only difference between easy and hard ver ...

  7. Codeforces Round #456 (Div. 2) B题

    B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...

  8. 2017 ZSTU寒假排位赛 #7

    题目链接:https://vjudge.net/contest/149498#overview. A题,水题,直接按照题意模拟一下即可. B题,我用的是线段树.大力用的差分标记(上次听zy说过,下次再 ...

  9. 【BZOJ3098】 Hash Killer II

    BZOJ3098 Hash Killer II Solution 这道题目好像题面里面给了提示(当然没给就有点难想了.) 曾经讲过一个叫做生日悖论的,不知道还有多少人记得 考虑相同的可能性大概是\(\ ...

  10. elasticsearch Delete (根据条件删除)

    之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件. bin/plugin install delete-by-query 需 ...