基于springreactor3构建的即时通讯api。

陆陆起飞啦      2022-04-26     275

关键词:

技术栈

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机制(还未实现)

 

快速开始

  • 服务端
 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 操作类
   });

代码库: https://github.com/1ssqq1lxr/Rmessage

构建 Android XMPP 即时通讯工具和服务器示例 [关闭]

】构建AndroidXMPP即时通讯工具和服务器示例[关闭]【英文标题】:BuildAndroidXMPPinstantmessengerandserverExample[closed]【发布时间】:2015-08-2908:53:24【问题描述】:背景我想了解即时通讯工具,包括安卓应用和服务器。在我的第一个想法中... 查看详情

imfire即时通讯系统构建(前言)

缘起termtalk  一切起源于我对蘑菇街termtalk开源IM系统源代码的好奇,termtalk简称tt。无论如何,都应该先向tt致敬,开源实属不易。看了一些分析tt架构的文章,感觉还不错,说是能支持高并发高可用的。听说有一些公司也借用... 查看详情

如何搭建一个自己的im即时通讯聊天软件?

...聊天软件的框架如下:1、CIM中的各个组件均采用SpringBoot构建。2、采用Netty+GoogleProtocolBuffer构建底层通信。3、Redis存放各个客户端的路由信息、账号信息、在线状态等。4、Zookeeper用于IM-server服务的注册与发现。搭建IM即时通讯聊... 查看详情

AMQP 协议是不是适合构建基于 Web 的即时消息应用程序?

】AMQP协议是不是适合构建基于Web的即时消息应用程序?【英文标题】:IstheAMQPprotocolsuitableforbuildingwebbasedinstantmessagingapplications?AMQP协议是否适合构建基于Web的即时消息应用程序?【发布时间】:2012-01-2405:18:00【问题描述】:目前... 查看详情

flask-web——即时通讯imwebsocketsocket.io实时推送消息(代码片段)

...、即时通讯简介即时通讯(InstantMessaging)是一种基于互联网的即时交流消息的业务。类型:在线push适用:web页面和App自己构建IM服务器使用WebSocket采用成熟的框架方案Socket.IO对于App还可自己封装socket使用第三方IM... 查看详情

基于netty的im即时通讯系统设计

...,以网络编程的基础技术视野,思考和实践如何基于Netty网络库从零写一个可以聊天的IM系统的过程,没有眼花缭乱的架构设计、也没有高端大气的模式设计方法论,有的只是从IM入门者的角度的思路和实战,... 查看详情

imfire即时通讯系统构建(需求)

ImFire需求一期需求(近期)1.新用户(账号)注册。2.用户登入登出,支持pc端,移动端同时登录。3.获取好友列表。4.根据用户id或用户名申请添加好友。5.发送单聊消息(可发往陌生人)。6.新建群聊。7.申请加入群聊。8.发送群聊... 查看详情

android性能优化之即时通讯优化

面试的时候问到了即时通讯系统,我选择的是基于xmpp进行即时通讯的框架,整个系统是基于openfire去实现的,但是怎么说呢,毕竟这个开源项目来说只是提供一个框架,其实是需要我们对他进行优化和改善的&#... 查看详情

Rails 的即时通讯实现?

...了一段时间,研究了几种技术来为ruby​​onrails应用程序构建一个简单的即时消息系统。这似乎很复杂,因为我根本没有找到任何跨浏览器或任何1-1概念证明的实现。调查过:xmpp客户端(github上有Candy只支持群聊)xmpp服务器和Ra 查看详情

基于开源im即时通讯框架mobileimsdk:rainbowchatv8.2版已发布

...#160;三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。工程开源地址是:1)Gitee码作者:JackJiang(点击作者姓名进入Github)出处:http://w 查看详情

即时通讯如何基于netty实现海量接入的推送服务

作为高性能的NIO框架,利用Netty开发高效的推送服务技术上是可行的,但是由于推送服务自身的复杂性,想要开发出稳定、高性能的推送服务并非易事,需要在设计阶段针对推送服务的特点进行合理设计。 最大句... 查看详情

基于netty,从零开发一个im即时通讯

业务场景:本次实战就是模拟微信的IM聊天,每个客户端和服务端建立连接,并且可以实现点对点通信(单聊),点对多点通信(群聊)。 设计思路:我们要实现的是点(客户端)对点&... 查看详情

即时定位与地图构建(slam)与基于视觉的slam(vslam)

即时定位与地图构建(SLAM)的相关研究即时定位与地图构建(SimultaneousLocalizationAndMapping)指的是机器人在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。SLAM问题可以描... 查看详情

xmpp即时通讯协议的特性---长处和缺点!

xmpp协议的定义?XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此。基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP能够通过发送扩展的信息来处理用户的需求。以及在XMPP的顶... 查看详情

基于netty实现分布式im即时通讯开发

计算机编程的学习,能不能把知识学到手,讲究的是动手实践。在我编写的文章中,基本都是以实践代码验证结果为核心来讲述文章内容。可能有人不知道Netty是什么,这里简单介绍下: Netty是一个Java开源框... 查看详情

基于netty,搭建高性能im即时通讯集群

整个系统是一个C/S系统,客户端没有做复杂的图形化界面而是用Java终端开发的(黑窗口),服务端IM实例是Netty写的socket服务。 ZK作为服务注册中心,Redis用来做分布式会话的缓存,并保存用户信息和轻量... 查看详情

基于netty,搭建高性能im即时通讯集群

整个系统是一个C/S系统,客户端没有做复杂的图形化界面而是用Java终端开发的(黑窗口),服务端IM实例是Netty写的socket服务。 ZK作为服务注册中心,Redis用来做分布式会话的缓存,并保存用户信息和轻量... 查看详情

基于tcp的移动端im即时通讯开发仍然需要心跳保活

...人认为,TCP协议自身先天就有KeepAlive机制,为何基于它的通讯链接,仍然需要在应用层实现额外的心跳保活?本文将从移动端IM实践的角度告诉你,即使使用的是TCP协议,应用层的心跳保活仍旧必不可少。... 查看详情