阅读更多

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
非常不错的产品,感谢分享!

发表评论

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

相关推荐

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

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

  • C语言 char 类型详解

    char类型是 C 语言中非常重要的基本数据类型,用于存储单个字符或其对应的整数值。它在字符处理、字符串操作、文件读写等方面具有广泛的应用。理解char类型的特点、存储机制和类型转换对于 C 语言编程至关重要。

  • char *p和 char p[]的区别

    #include <stdio.h> #include <string.h> void go(char *str,int len) { strcpy(str,"yujinchi"); } int main() { char str[] = "yuJinChi love tangLiNa"; //char p[]是一个数组,已经分配内存,是将"abc123ABC" 复制到该内存里面,这个内存 是可读写的 //char *str.

  • char*、char**和char***的使用

    1、char*的使用 char str[] = "hello"; char* ch = str; printf(" %s",ch); 2、char**的使用 char *str[] = {"hello","world"}; char **ch = str ; printf("%s",ch[0]); 3、char***的使用 char *str[][] = {{"hello","world"},{"nihao","shijie"}}; char ***ch= str; print...

  • C语言指针详解:*p,p与&p的区别

    称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址。*称为指针运算符,是一个一元运算符,表示指针所指向的对象的值;p表示一个指针变量的名字,指此指针变量所指向的内存地址。*p表示此指针指向的内存地址中存放的内容。**p是让程序取出内存地址数据。

  • char * 与 char[]

    char*p,表示p是指向字符串的指针 char arr[],表示arr是一个字符串数组 通过下面的例子来看char*与char[]的区别: 1)char s[5]; s = "abcd"; //错误 2)char *s; s = "abcd"; //正确 1编译不通过但是2编译通过。这是因为在1中,s是数组名,当成是常量指针,不可以作为左值修改;而2中s是一个指针变...

  • C语言*p、p以及&p的区别,*p和**p的区别

    转自C语言*p、p以及&p的区别 前言: 先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。 上面就段理解了,*p和p的区别就不难解释了。 p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“ * ”是解引用操作符,你可以把它理解成打开盒子,p就是打开p号盒子,取出里面的数据。 简单来说,你记住,p存放的是地址,...

  • C++解析char *p与char p[]

    首先来看一道题目: #include "stdio.h" char *get_string_1() { char p[] = "hello world!"; return p; } char *get_string_2() { char *p = "hello world!"; return p; } int main() { char *p; ...

  • C语言,指针变量的*p,p以及&p的区别

    关注公众号“码农帮派”,查看更多系列技术文章: 以下面的情况说明: int a = 5; int* p = &a; ----------------------------------------------------------------------------------------------------------- 结论: *p 是指针变量p指向的变...

  • *p 是什么意思

    (*p++)是什么意思 void main() { int a[6]={4,5,6,9,5,7}; int *p=a,*q=p; int i=0; printf("%d\n",*p++); for(i=0;i<6;i++){ printf("%d ",a[i]); } printf("\n"); }

  • *p和**p的区别

    int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针) 例如: int i=10; //定义了一个整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级

  • char* p和char p[];

    对于语句char* p = "hello"; 和 char p[] = {'h','e','l','l','0'};用什么区别呢? ①这两条语句中的p都是指向‘h’的地址。 ② 前者的“hello”存放在常量区,不可改变;而后者存放在栈上面,可以改变。 #include using namespace std; int main(){ char* p = "hello";

  • char* p与char p[]

    5个区: (⊙v⊙)嗯,其实这5个区没啥好说的。但是为了之后要写的内容,先把这5个区简单说一下嘛。 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等 堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收

Global site tag (gtag.js) - Google Analytics