阅读更多

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

发表评论

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

相关推荐

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

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

  • 指针*p **p ***p的理解

    指针*p **p ***p的含义 首先要理解指针 *p在左右不同的区别和如何定义指针类型: *p 在左边表示内容 *p 在右边表示地址 例如: int a;//假设a的地址为0xffff a=10; int *p=&a; 这里在左边的*p表示指针,记录的是数据a的地址。例如0xffff。 int *p=10; int b; b=*p; 这里在右边的*p表示内容,也就是说b=10; int c; int*p=c; char d; char *p=d; 当定义指针时,定义的指针类型应当于被指向

  • c语言 char类型介绍

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

  • 关于C语言 char *p =“abc“ 的理解

    疑问 学习过程中,了解到 int *p = &a; 即把变量a的地址赋值给p。所以p里面存的是一串地址。 后来经常看到 char *p =“abc”; 这样的写法,产生疑惑:“abc”也是一串地址吗?32位系统下一个指针占4个字节,如果赋值时,“abc” 双引号里面的字母有成百上千个,那4个字节装得下吗? 解答 C语言里没有字符串类型,“abc” 这样的字符串其实是字符数组的简写,即 {‘a’, ‘b’, ‘c’, ‘\0’} 。 //写法1 char *p ="abc"; //写法2 char

  • 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** p即指针的指针的一点心得

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

  • 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...

  • 从语句char* p="test"说起

    作者:陈皓 来源:编程爱好者  ithao123整理 2007-06-10 我相信,使用C/C++多年的人对下面这个字符串赋值语句都不会陌生吧。 char* p = "test"; 同时,我也相信,各位在使用这种语句后吃过很多苦头也不少吧?只要你想利用指针p来改变字符串的内容,你的程序都会得到一个让你颜面尽失一个内存非法操作。比如,下面的这些语句: p[0] = 's'; s...

  • 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";

  • C语言指针

    指针 指针全称是指针变量,其实质是C语言的一种变量。这种变量比较特殊,通常它的值会被赋值为某个变量的地址值(p = &a),然后我们可以使用p这样的方式去间接访问p所指向的那个变量。* 1.1、为什么需要指针? 指针存在的目的就是间接访问。有了指针之后,我们访问变量a不必只通过a这个变量名来访问。而可以通过p = &a; *p = xxx;这样的方式来间接访问变量a。 1.2、两种重要运算符:&和* &:取地址符,将它加在某个变量前面,则组合后的符号代表这个变量的地址值。 例

  • char、char*和char**

  • char *p="abc" 与 char p[]="abc" 的区别

    有这样一段代码:view plaincopy#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;p = get_string_1();printf("g...

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

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

  • char (*p)[]与char *p[]

    char p[] = "hello,world"; 是对字符串"hello,world"做了拷贝,所以可以对拷贝字符串做任意修改char *p = "hello,world"; 字符串常量将自己在静态存储区中的地址赋给了p指针char (*p)[SIZE]:指向一维数组的指针,一维数组只能有SIZE个元素例:#include #define STRSIZE 20int main(void){       char str[][STRSIZE]={"hello", "world!"};       char

  • 解析char *p与char p[]

    转自:http://yuhuafx.blog.hexun.com/35683001_d.html 见论坛上有人讨论这个问题,感觉也是涉及面比较广,而且很多人犯过这个错误,比如声明char *p = "hello world!";却妄图用p指针改变字符串内容,所以就这

  • *p与**p的区别

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

  • 【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

Global site tag (gtag.js) - Google Analytics