All Projects → bootsrc → Fpush

bootsrc / Fpush

Licence: apache-2.0
📶即时消息推送服务(即时通讯),基于Netty+protobuf-- Instant Messaging push service based on Netty+protobuf

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Fpush

bootpush
📶即时消息推送服务(即时通讯),基于Netty- Instant Messaging push service based on Netty
Stars: ✭ 146 (+8.96%)
Mutual labels:  netty, instant-messaging, im, push, netty4
Mobileimsdk
一个原创移动端IM通信层框架,轻量级、高度提炼,历经8年、久经考验。可能是市面上唯一同时支持UDP+TCP+WebSocket三种协议的同类开源框架,支持iOS、Android、Java、H5,服务端基于Netty。
Stars: ✭ 3,864 (+2783.58%)
Mutual labels:  im, push, netty
Mpush
MPush开源实时消息推送系统
Stars: ✭ 3,455 (+2478.36%)
Mutual labels:  im, push, netty
Im
IM server based on netty. Provides a client jar. Integrate with your own login system.基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统
Stars: ✭ 490 (+265.67%)
Mutual labels:  im, instant-messaging, netty
Fan Push
a simple and small push system for Android and server based on Netty.
Stars: ✭ 238 (+77.61%)
Mutual labels:  instant-messaging, push, netty
Im
仿QQ即时通讯系统服务端
Stars: ✭ 369 (+175.37%)
Mutual labels:  im, netty
Kingim
KingIM是基于layim的websocket即时通讯系统,底层使用netty。
Stars: ✭ 538 (+301.49%)
Mutual labels:  im, netty
Inchat
一个轻量级、高效率的支持多端(应用与硬件Iot)的可分布式、异步网络应用通讯框架
Stars: ✭ 654 (+388.06%)
Mutual labels:  im, netty4
Android yichat lite
android client
Stars: ✭ 118 (-11.94%)
Mutual labels:  im, instant-messaging
Naivechat
🎭 本项目是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信实现通信核心功能。课程文章已发布到GitChat专栏,欢迎购买。如果本项目能为您提供帮助,请给予支持(关注、⭐️Star、分享)!
Stars: ✭ 290 (+116.42%)
Mutual labels:  netty4, netty
Yichat
YiChat-基于tigase的独立IM系统
Stars: ✭ 731 (+445.52%)
Mutual labels:  im, instant-messaging
Light Push
轻量级推送服务和实时在线监控平台,同时用于开发即时通信系统,基于node的socket.io,支持web、android、ios客户端,支持移动端离线推送,可进行分布式部署
Stars: ✭ 128 (-4.48%)
Mutual labels:  im, push
Dorado
基于Netty4开发的简单、轻量级、高性能的的Http restful api server
Stars: ✭ 65 (-51.49%)
Mutual labels:  netty4, netty
Brpc Java
Java implementation for Baidu RPC, multi-protocol & high performance RPC.
Stars: ✭ 647 (+382.84%)
Mutual labels:  push, netty
Cim
📲cim(cross IM) 适用于开发者的分布式即时通讯系统
Stars: ✭ 8,109 (+5951.49%)
Mutual labels:  im, netty
Easychatandroidclient
EasyChat是一个开源的社交类的App。主要包含消息、好友、群组等相关的IM核心功能。部分界面参照了QQ、微信等相关社交APP。EasyChat APP整体采用MVVM模式,基于JetPack(Lifecycle,LiveData,ViewModel,Room)构建
Stars: ✭ 64 (-52.24%)
Mutual labels:  im, netty
Netty Websocket Spring Boot Starter
🚀 lightweight high-performance WebSocket framework ( 轻量级、高性能的WebSocket框架)
Stars: ✭ 885 (+560.45%)
Mutual labels:  im, netty
Im service
golang im server
Stars: ✭ 1,694 (+1164.18%)
Mutual labels:  im, instant-messaging
electronim
Electron based multi IM (Instant Messaging) client
Stars: ✭ 50 (-62.69%)
Mutual labels:  instant-messaging, im
vscode-qq
基于安卓QQ协议的vscode-qq扩展
Stars: ✭ 588 (+338.81%)
Mutual labels:  instant-messaging, im

fpush

fpush是即时消息推送服务程序.
旨在做一个类似于极光推送,小米推送之类的Java程序开源实现。基于Netty + protobuf
👉 fpush源码解析与使用(中文)

fpush监控后台,点击进入演示
👉 http://fpush-admin.appjishu.com
如果该项目对您有帮忙,您可以右上角'star'支持一下,谢谢!


技术栈

  1. JDK1.8
  2. Netty-4.1.31.Final
  3. protobuf-java 3.6.1

代码简介

fpush-core 核心类库,protobuf原型类
fpush-server server端, 接受来自自己的应用服务器的http推送请求,并把请求转换成netty的socket发送给fpush-client 实现消息推送,即时通讯技术。
fpush-client 客户端,模拟App或者网页,或者桌面应用的客户端

系统架构

1.系统部署架构图如下:






源码和技术架构分析详情见

👉 fpush源码解析与使用(中文)

运行

eclipse/IDEA里
Step1 右键run as--java application-- FpushServerApp.java
Step2 右键run as--java application-- FpushClientApp.java

Step3 后台发送消息给fpush-client (用来模拟android,ios或者网页,或者java应用的消息客户端) 浏览器访问 http://localhost:10200
显示Welcome to fpush application!, 说明server运行起来了
然后浏览器请求 http://localhost:10200/app/push?receiverAlias=lsm001&title=系统提醒&desc=消息内容001&data=abc


如果浏览器返回OK 并且fpush-client打印出下面的信息,说明推送消息成功

2018-11-19 14:28:44.792  INFO 27780 --- [ntLoopGroup-2-1] c.a.f.client.handler.PushConfirmHandler  : --->>>这是推送到客户端的消息:title=fpush-Demo
2018-11-19 14:29:17.067  INFO 27780 --- [ntLoopGroup-2-1] c.a.f.client.handler.PushConfirmHandler  : --->>>这是推送到客户端的消息:description=这是一条推送给lsm001的消息!

Step4 Android演示

演示视频如下demo.mp4

server效果图


client在eclipse上调试的效果图-eclipse console可以显示中文字符



测试

注册一个应用账号,手机号是15600000000
http://localhost:10200/app/registerAccount?mobilePhone=15600000000

http://localhost:10200/app/secretToken?appId=517723931931574272&appSecretKey=cb2eb85b362941f1b3e1


http://localhost:10200/app/keyToken?appId=517723931931574272&appKey=9f5d74bb0f68

然后浏览器请求 http://localhost:10200/app/push?receiverAlias=lsm001&title=系统提醒&desc=消息内容001&data=abc

查看所有的netty channel连接情况, 浏览器输入下面的网址 http://appjishu.com:10200/monitor/channelList

Android客户端演示可以直接使用apk文件装到自己的android手机上去
fpush-android-demo.apk
里面的测试host就是我个人的服务器host:appjishu.com

fpush监控后台
👉 http://fpush-admin.appjishu.com

Done List

🚩🚩🚩

  1. netty+protobuf
    protobuf的解码ProtobufVarint32FrameDecoder,ProtobufDecoder
    protobuf的编码ProtobufVarint32LengthFieldPrepender,ProtobufEncoder

  2. 心跳机制的实现
    client端经过HeartBeatResponseHandler新建线程,定期发出心跳请求
    server端的HeartBeatResponseHandler监听心跳并作出响应

  3. 客户端长连接的鉴权
    客户端(即fpush-client)发送appId + appKey,经后台鉴定权限通过后,获取到clientToken
    fpush-client与fpush-server通信的时候, RegisterRequestHandler和HeartBeatRequestHandler里面需要带上
    appId+clientToken 建立长连接后,最好所有的RequestHandler需要带上appId+clientToken

  4. 应用服务端的http连接的鉴权
    应用服务端(即app server)发送appId + appSecretKey,经后台鉴定权限通过后,获取到appToken 应用服务端每次调用fpush-server的api都需要带上appId+appToken


TODO list

  1. 需要在FHeader里增加msgId

2. 增加IdleStateHandler来对heartbeat进行监控,设定的时间间隔内没有收到心跳,就断开连接 Netty的IdleStateHandler会根据用户的使用场景,启动三类定时任务,分别是:ReaderIdleTimeoutTask、WriterIdleTimeoutTask和AllIdleTimeoutTask,它们都会被加入到NioEventLoop的Task队列中被调度和执行。
3. server端长连接的超时时间的设置
我们是长连接服务,手机端和服务端要维持这个长连接,需要定期的发送心跳消息,我们为了节约电量和流量,手机端采用的是智能心跳模式。那么对服务端来说,它是不知道手机端下次是几分钟之后会发送心跳上来的,那么这个连接在服务端的超时时间应该设置多久就是一个问题了。 客户端在每一次的心跳消息中携带下一次的心跳时间。服务端就根据这个时间来设置连接的超时时间。

如果该项目对您有帮忙,您可以右上角'star'支持一下,谢谢!
有代码改进优化的建议的可以提issue
加群讨论
![](doc/image/group-qrcode.png)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].