关键词:
技术栈
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 操作类 });
构建 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 的即时通讯实现?
...了一段时间,研究了几种技术来为rubyonrails应用程序构建一个简单的即时消息系统。这似乎很复杂,因为我根本没有找到任何跨浏览器或任何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协议,应用层的心跳保活仍旧必不可少。... 查看详情