阅读更多

13顶
0踩

开源软件

引言

由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统

所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理

这一套代码,最近比较闲就拿出来给开源做点贡献。

作为Java版的开源推送系统,MPUSH还是有很多不错的设计的,特别是对想自己搭建一套推送系统的团队

是有很大的借鉴意义的。当然开源出来也是不想曾经做过的工作白白浪费掉,特别希望对这方面有兴趣的同学

来一起把这套东西做的更好,服务更多的用户!

项目主页

https://mpusher.github.io

系统介绍

mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点。同时也是少有的可商用的开源推送系统。

特性和优势

1. 源码全部开放,包括server、android、ios (不像有些开源服务只开放部分代码,鄙视下)

2. 代码质量高,全部模块化设计,真正的商用级产品,考虑到推送中遇到的大部分场景

3. 安全性高,基于RSA精简的加密握手协议,简单,高效,安全

4. 支持断线重连,及弱网下的快速重连,无网络下自动休眠节省电量和资源

5. 协议简洁,接口流畅,支持数据压缩,更加节省流量

6. 支持集群部署,支持负载均衡,基于成熟的zookeeper实现

7. 用户路由使用redis集群,支持单写,双写,集群分组;性能好,可用性高

8. 支持http代理,一根TCP链接接管应用大部分请求,让http请求更加及时

9. 高度可配置化,基本上通过修改配置可满足大部分场景

10. 扩展性强,高度模块化,基于SPI模式的可拔插设计,以满足特殊需求

11. 监控完善,日志详细,可快速排查线上问题及服务调优

教程与文档

开发手册:https://mpusher.github.io/docs

源码

server https://github.com/mpusher/mpush

java-client https://github.com/mpusher/mpush-client-java

android sdk&demo https://github.com/mpusher/mpush-android

iOS sdk https://github.com/mpusher/mpush-client-swift

13
0
评论 共 3 条 请登录后发表评论
3 楼 xlaohe1 2016-09-08 17:53
mark有空研究下
2 楼 guochao205 2016-09-04 10:54
基于netty的?
1 楼 kimimo 2016-08-31 17:19
非常不错的产品,感谢分享!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 个人通信系统研究.pdf

    个人通信系统研究.pdf

  • c语言char怎么用?

    转载自品略图书馆http://www.pinlue.com/article/2020/04/1307/5610161100625.html C语言中char用于定义字符类型变量或字符指针变量,例如“char a;”则定义了变量a是字符类型,“char *a;”则定义了变量a是字符指针类型。 C语言中char的不同应用 1、字符型(char) 字符型(char)用于储存字符(char...

  • C++中的char,char*,char[]

    C++中的char是字符的意思,可以用例如'a'来表示,每个字符串string都是由很多个单独的字符char组成。 char*是一个指针,例如:char* s1= "abc",s1是一个指针,指向一个字符串常量“abc",s1这个指针可以被修改,但是字符串常量不可被修改,如果修改s1的内容,如s1="123",修改的并不是”abc”的内容,而是将s1的指针指向了新的地址。 char s2[1...

  • C语言基础——数据类型与变量

    原本数据类型的内存是一定的,但当有了unsigned 或 signed 修饰后就可以精细化数据的范围,使其在有效作用下有更大的范围。内置类型分为整型(int),字符型(char),浮点型(float),布尔型(True&False)signed表示有符号(eg:int 默认为 signed int 即可表示正整数,0,与负整数)【全局变量】:可以在整个工程内调用,初始化的位置在{}外面(不在函数内初始化)每种数据类型的长度固定【sizeof计算的是数据类型的长度,与数据内容无关】

  • char* char[]

    C++判断char*的指向 char *a = "Peter"; char b[] = "Peter"; char *c = new char[6]; strcpy_s(c, 6, "Peter"); 这里a指向常量区 b指向栈区 c指向堆区 //main.cpp int a=0; //全局初始化区 char *p1; //全局未初始化区 main() { in...

  • 如何理解char** p即指针的指针的一点心得

    /定义字符指针的指针的指针q指向p。//定义字符指针的指针p指向ptr。//再定义一个字符型指针指向c,没问题,那么如果我们要定义一个指针指向ptr该怎么办?//定义字符变量c,其值为'y'//定义字符指针ptr指向c。//以下的地址都指向c,值也都同c。char** p又称为指针的指针,或二维数组,是C语言中的理解难点。//所以,到此可以一目了然的理解char***……//先定义一个字符变量c,其值为字符y。

  • char、char*和char**

  • 嵌入式基础C语言篇 三、字符型(char, character) --- 一个字节的int型

    相比某一天做很多事,每天做一点儿事的影响力会更大。

  • C/C++的char*到底是个什么东西——char*的内存占用与用法

    C/C++的char*到底是个什么东西——char*的内存占用与用法为什么要写这篇前置知识——程序运行时的内存使用情况char*是什么char*的用法 首先声明,写这个之前看了一些博客,这篇对我的帮助最大,感谢这位博主:https://blog.csdn.net/yahohi/article/details/7427724 为什么要写这篇 最近在写C++作业的时候要写一个Person类,在名字输入...

  • c语言 char类型介绍

    在 C 语言中,char是一种基本的数据类型,用于表示字符。以下是关于char。

  • c语言char的字符类型,C语言基本类型字符型(char)用法介绍

    C语言基本类型字符型(char)用法介绍C语言基本类型:字符型(char)用法介绍1.字符型(char)简介字符型(char)用于储存字符(character),如英文字母或标点。严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际上是整数,而不是字符。计算机使用特定的整数编码来表示特定的字符。美国普遍使用的编码是 ASCII(American S...

  • char**是什么数据类型

    p_str_arr` 指向了 `str_arr` 数组的第一个元素,即 `"hello"` 字符串的首地址。`char**` 类型的变量 `var_name` 可以指向一个 `char*` 类型的指针数组,也可以理解为 `char*` 类型的指针的指针。// 输出 "hello", "world", "!

  • char** p

    char p是声明一个字符类型变量p,char * p1是声明一个字符类型的指针变量p1,那么char ** p2就相当与给char类型的指针变量再声明一个指针.(2级指针)举个例子,假如:char p=a;//假设声明了p后,p在内存的1000处,则&p=1000(&为取变量首地址)char * p1=&p;//则p1=1000,*p1=p=a,p1就和p关联了;假设p1

  • 【C/C++】对char* 和 char[]区别的一些理解

    相同点首先 这两种类型都可以对应一个字符串,比如: char * a=”string1”; char b[]=”string2”; printf(“a=%s, b=%s”, a, b); 其中a是一个指向char变量的指针,b则是一个char数组(字符数组),其次 ,很多时候二者可以混用,像函数传参数的时候,实参可以是char*,形参可以是 char[],比如: void fun1(cha

  • (笔记)char * p与 char p[ ] 的区别

    char * p与 char p[ ]区别。 char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8

  • C++二级指针char **的用法

    char **p和char *p[]基本一样, 区别讲不出来,写个例子体会吧。 #include  using namespace std; void main() {     // 第一种初始化方法     char **p = new char *[10];     // 赋值后正常使用     p[0] = "aaa";     cout0]     // 

  • char *指针与char 数组的区别

    char *指针与char 数组的区别

  • int* p;和int *p;应怎样理解(c++语言中星号的位置)?

    问题 今天学习c++时,突然意识到一个小问题,在定义一个指针变量时,到底是写成int* p;还是写成int *p;,也就是星号是靠近int 还是靠近 p? 在网上找到了一些回答,下面写一下总结(总要留下点什么,不枉我花费这么多时间,嘿嘿!) 解决 1、在定义单个变量时,以下三种写法都是一样的,编译器都能理解你在定义一个指针变量,具体编写过程还是看个人风格: int* p; int * p; int...

Global site tag (gtag.js) - Google Analytics