精华内容
下载资源
问答
  • 闪拍系统中,有个需求是关于服务器推送方案。即:每秒刷新1次拍卖相关的信息(价格、出价时间、出价人等)。如何设计这个架构?(可以参考:传统轮询,ajax轮询,长连接,长轮询,WebSocket等技术). 要求: ...
  • java推送技术的选择(一)

    千次阅读 2017-07-27 18:41:48
    java推送技术这段时间一直在做关于服务器端向APP端推送消息,查阅了大量的资料,这里做下总结。关于推送我们常见的推送有APP外推送,APP内推送。APP外推送有各大平台极光,友盟等,而APP内的推送可以用的服务基本...

    java推送技术

    这段时间一直在做关于服务器端向APP端推送消息,查阅了大量的资料,这里做下总结。

    关于推送我们常见的推送有APP外推送,APP内推送。APP外推送有各大平台极光,友盟等,而APP内的推送可以用的服务基本需要自己去实现,这里我给大家介绍的就是关于APP内的推送技术,我会再下面的文章介绍如何实现APP内推送。

    推送协议分类

    这些是我从网上查询出的协议对比

    方案1、 使用GCM服务(Google Cloud Messaging)
    简介:Google推出的云消息服务,即第二代的G2DM。
    优点:Google提供的服务、原生、简单,无需实现和部署服务端。
    缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。

    方案2、 使用XMPP协议(Openfire + Spark + Smack)
    简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
    优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
    缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

    方案3、 使用MQTT协议(更多信息见: http://mqtt.org/
    简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
    优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software ),且已有C++版的服务端组件rsmb。
    缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

    方案4、 使用HTTP轮循方式
    简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
    优点:实现简单、可控性强,部署硬件成本低。
    缺点:实时性差。

    从以上协议对比,可以看出第一种国内不可以使用排除,第四种效率太低不建议使用,然后就只有第二,三种可以选择,然后我们继续筛选。

    mqtt协议比较灵活,但是需要实现东西太多,如果团队人数足够,时间充足可以自己去实现。
    但是团队人太少,我建议使用XMPP实现,因为实现简单,开发快速,成本较小。

    使用框架

    在公司项目中经过各种讨论对比,最终我们选择了XMPP协议实现的推送服务。

    经过对比在公司产品上,使用XMPP时,XMPP的缺点(协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高)
    可以接受,在消息内容上,只推送少量关键数据,主要的数据还是靠http拉取的方式,并且现在都是4G的情况下,XMPP的协议的缺点都是可以接受。XMPP的很多实现我们都可以使用,减少了我们开发的时间。

    xmpp技术介绍

    服务端组件Openfire

    是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。

    Java开发库Smack

    Smack是一个开源,易于使用的XMPP(jabber)客户端类库。

    客户端组件Spark

    xmpp 客户端组件,使用XMPP实现的聊天工具。


    在项目中我们使用的就是smack库进行XMPP消息的推送,客户端android和ios的实现也有相应的类库。这里不作介绍,我了解的都是服务器端的实现。

    展开全文
  • Java Web 服务器的消息推送 几种方案

    万次阅读 2017-12-11 21:38:43
    简单实现 轮询 ...前端使用ajax不停的发起请求获取想要的数据(最...参考博客:comet4j java服务端推送消息到web页面实例 Websocket 代码片段:Springboot使用Websocket进行消息推送 DWR ...

    1. 轮询

    • 前端使用ajax不停的发起请求获取想要的数据(最简单也是最容易耗尽服务器资源)

    2. 长连接

    1. HTTP长连接
      • 客户端向服务端发起请求,服务端等有数据了才response,否则一直持有该连接
    2. Comet
    3. Websocket
    4. SSE

    3. DWR

    官网

    4. HTTP2协议

    未完待续…

    展开全文
  • java 集成极光推送

    万次阅读 2019-11-04 18:51:14
    前段时间公司引入了极光推送,做个简单的记录,大致开发步骤如下: 到极光官网注册账号 创建应用 完善应用信息(Android、iOS) 各端集成 联调 前面步骤不细讲了,可自行翻阅 -> 极光推送官方文档 我是直接...

    前段时间公司引入了极光推送,做个简单的记录,大致开发步骤如下:

    1. 到极光官网注册账号
    2. 创建应用
    3. 完善应用信息(Android、iOS)
    4. 各端集成
    5. 联调

    前面步骤不细讲了,可自行翻阅 -> 极光推送官方文档
    我是直接下载官方sdk进行修改的,话不多说,直接上代码吧。

    maven引入极光推送包,我们用的是3.3.11:
    <!-- 极光推送 -->
    <dependency>
        <groupId>cn.jpush.api</groupId>
        <artifactId>jpush-client</artifactId>
        <version>3.3.11</version>
    </dependency>
    
    主要业务代码如下(代码经处理过,大家需要根据实际业务场景修改):
    @Service
    public interface JpushService {
        boolean push(WeChatPushType type, String alias, String urlParam, String... inputParam);
    
        boolean jobPush(String title, String content, String url) throws APIConnectionException, APIRequestException;
    }
    
    
    
    /**
     * @Author: Hou_fx
     * @Date: 2019/8/1 11:40
     * @Description:
     */
    @Service
    public class JpushServiceImpl implements JpushService {
        @Value("${jPush.appKey}")
        private String appKey;
        @Value("${jPush.masterSecret}")
        private String masterSecret;
        @Value("${jPush.devMode}")
        private Boolean devMode;
        @Value("${jPush.url}")
        private String url;
        private static final Logger LOG = LoggerFactory.getLogger(WeChatPushServiceImpl.class);
    
        @Override
        public boolean push(WeChatPushType type, String alias,String urlParam, String ... inputParam) {
            try {
                return this.pushAlias(type, alias,urlParam,inputParam);
    
            } catch (APIConnectionException e) {
                // Connection error, should retry later
                LOG.error("Connection error, should retry later", e);
                return false;
            } catch (APIRequestException e) {
                // Should review the error, and fix the request
                LOG.error("Should review the error, and fix the request", e);
                LOG.info("HTTP Status: " + e.getStatus());
                LOG.info("Error Code: " + e.getErrorCode());
                LOG.info("Error Message: " + e.getErrorMessage());
                return false;
            }
        }
    
        @Override
        public boolean jobPush(String title, String content, String url) throws APIConnectionException, APIRequestException  {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            Map param = new HashMap() {{
                put("url", url);
            }};
            PushPayload payload = PushPayload.newBuilder()
                    .setPlatform(Platform.android_ios())
                    .setAudience(Audience.all())
                    .setNotification(Notification.newBuilder()
                            .setAlert(content)
                            .addPlatformNotification(AndroidNotification.newBuilder()
                                    .setTitle(title)
                                    .addExtras(param).build())
                            .addPlatformNotification(IosNotification.newBuilder()
                                    .incrBadge(1)
                                    .addExtras(param).build())
                            .build())
                    .setOptions(this.setOptions())
                    .build();
            LOG.info("payload param - {}", JSONObject.toJSONString(payload));
            PushResult result = jpushClient.sendPush(payload);
            LOG.info("Got result - " + result);
            return false;
        }
    
        private void jPush(String title, String content, WeChatPushType type, String alias,String url) throws APIConnectionException, APIRequestException {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            Map param = new HashMap() {{
                put("type", type.name());
                put("url", url);
            }};
            PushPayload payload = PushPayload.newBuilder()
                    .setPlatform(Platform.android_ios())
                    .setAudience(Audience.alias(alias))
                    .setNotification(Notification.newBuilder()
                            .setAlert(content)
                            .addPlatformNotification(AndroidNotification.newBuilder()
                                    .setTitle(title)
                                    .addExtras(param).build())
                            .addPlatformNotification(IosNotification.newBuilder()
                                    .incrBadge(1)
                                    .addExtras(param).build())
                            .build())
                    .setOptions(this.setOptions())
                    .build();
            LOG.info("payload param - {}", JSONObject.toJSONString(payload));
            PushResult result = jpushClient.sendPush(payload);
            LOG.info("Got result - " + result);
        }
    
        private Options setOptions(){
            if(devMode){
                return Options.newBuilder()
                        .setApnsProduction(false).build();
            }else{
                return Options.newBuilder()
                        .setApnsProduction(true).build();
            }
        }
        private boolean pushAlias(WeChatPushType type, String alias,String urlParam, String... inputParam) throws APIConnectionException, APIRequestException {
            String title,content,url="";
            WeChatPushType pushType;
            String[] params = urlParam.split(",");
            switch (type) {
                // 认证
                case W005:
                    title = "认证成功";
                    content = "恭喜,您的企业账号已认证成功,现可免费体验一键智能匹配服务,点击查看";
                    pushType = W005;
                    break;
                // 受理
                case W011:
                    title = "对接进度变更";
                    content = String.format("您的(%s)融资申请已受理,点击查看需求进度", inputParam);
                    pushType = W011;
                    url = String.format(this.url + "/aaaaaa/#/ssssss?cccc=%s&id=%s", params);
                    break;
                // 审核
                case W016:
                    title = "对接进度变更";
                    content = String.format("您的(%s)融资申请已审批通过,点击查看需求进度", inputParam);
                    pushType = W016;
                    url = String.format(this.url + "/aaaaaa/#/ssssss?cccc=%s&id=%s", params);
                    break;
                // 放款
                case W018:
                    title = "对接进度变更";
                    content = String.format("您的(%s)融资申请已成功放款,到账可能需要时间, 请耐心等待", inputParam);
                    pushType = W018;
                    url = String.format(this.url + "/aaaaaa/#/ssssss?cccc=%s&id=%s", params);
                    break;
                // 审核失败
                case W007:
                    title = "对接进度变更";
                    content = String.format("很抱歉,您的(%s)融资申请审核失败,原因为:%s,如有疑问,可联系在线客服咨询", inputParam);
                    pushType = W007;
                    url = String.format(this.url + "/aaaaaa/#/ssssss?cccc=%s&id=%s", params);
                    break;
                // 放款失败
                case W017:
                    title = "对接进度变更";
                    content = String.format("很抱歉,您的(%s)融资申请放款失败,原因为:%s,如有疑问,可联系在线客服咨询", inputParam);
                    pushType = W017;
                    url = String.format(this.url + "/aaaaaa/#/ssssss?cccc=%s&id=%s", params);
                    break;
                // 匹配更新
                case W010:
                    title = "融资方案";
                    content = "已为您匹配到企业专属融资方案,点击查看";
                    pushType = W010;
                    url = String.format(this.url + "/aaaaaa/#/bbb?matchType=%s", params);
                    break;
    
                default:
                    LOG.error("type not exist");
                    return false;
            }
            if (StringUtils.isNotEmpty(title)) {
                this.jPush(title, content, pushType, alias,url);
            }
    
            return true;
        }
    }
    
    
    业务场景调用代码

    我们是通过别名注册的,可查阅官方文档,这里以Android为例:安卓别名注册

    jpushService.push(WeChatPushType.W005, "ENT&" + userid,"");
    
    测试效果图如下

    测试效果图

    有疑问还请评论区留言~
    END

    展开全文
  • Android推送方案

    千次阅读 2014-09-23 09:49:03
    移动推送服务,就是通过建立一条手机与服务器的链路,当有消息需要发送到手机时,通过此链路发送即可。 安卓推送的实现方式包括: 方案1、使用C2DM服务(Google Cloud Messaging) 简介:Google推出的云...

    移动推送服务,就是通过建立一条手机与服务器的链路,当有消息需要发送到手机时,通过此链路发送即可。

    安卓推送的实现方式包括:

    方案1、使用C2DM服务(Google Cloud Messaging)

    简介:Google推出的云消息服务,即第二代的G2DM。

    优点:Google提供的服务、原生、简单,无需实现和部署服务端。

    缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。

    方案2、使用XMPP协议(Openfire + Spark + Smack)

    简介:基于XML协议的通讯协议,前身是Jabber,已由IETF国际标准化组织完成了标准化工作。

    优点:协议成熟、强大、可扩展性强、主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。

    缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

    方案3、使用MQTT协议

    简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。

    优点:协议简洁、小巧、可扩展性强、省流量、省电,应用到企业领域,且已有C++版的服务端组件rsmb。

    缺点:不够成熟、实现较复杂、服务端组件 rsmb 不开源,部署硬件成本较高。

    方案4、使用第三方推送服务

    简介:通过嵌入SDK使用第三方提供的推送服务,主流的有

    Google 云推送服务:鉴于国内的特殊情况,大部分国产手机都砍掉了Google服务,所以这种实现方式不太现实。

    百度云推送服务:这个推送方案实施起来比较简单,直接集成相关的sdk,就可以实现推送,而且服务端的sdk有PHP,Java,Python版本,也可以直接通过url推送相关消息。

    极光推送:这个文档比较全,号称3分钟快速Demo,集成起来相对就简单多了。

    优点:稳定,成熟,节省开发和探索时间,相对自己开发成本低,推送管理界面及统计程序完善。

    缺点:有程序嵌入顾虑。

    下面小编就简单的介绍下第三种方案的使用方法,希望可以帮助开发者在开发过程中少走弯路~

    1、首先下载rsmb包,并解压,找到对应服务器的文件夹,小编展示的是linux_ia32,这个支持多种服务器。

    rsmb包

    2、把目录及里面的文件上传到服务器上,进入到用命令行并进入到该目录,然后自行 ./broker这样便启动了推送服务。

    3、准备推送页面(通过网页进行推送测试)下载PHP端的推送代码(点击此处进行下载),解压进 入etc目录更改 config.php里的IP地址为你的服务器IP地址。

    4、打开对应的url既可以看到如下的页面 

    打开对应的url既可以看到如下的页面

    Server status显示为 Online说明服务器正常启动了。

    5、下面开始准备android客户端(点我点我

    下载-->解压-->导入eclipse-->修改PushService里的MQTT_HOST为你的服务器的IP地址-->运行

    运行图

    启动推送服务,然后在上边的网页上把那一串字符输入到上边的输入框,下边输入要推送的内容。

    接下来的内容是关于遇到的错误问题该如何解决,查看余下全文>>>

    相关文章推荐:

    android系统和ios系统是如何实现推送的,ios为什么没有后台推送 

    展开全文
  • 消息推送方案

    千次阅读 2018-11-09 17:20:29
    消息推送涉及到消息的发送和接收,即方案既要能在后端中使用,也要能在前端和移动端使用,所以需要能适配java 和 javaScript 语言。   选择方案  常规思路如下三种: 轮询(Pull)方式:客户端定时向服务器发送...
  • uni-app消息推送方案

    万次阅读 热门讨论 2019-11-06 01:13:40
    uni-app是支持消息推送的,参考如下文档: UniPush介绍 UniPush使用指南 UniPush开通指南 如何自定义推送通知的图标? 在 uni-app 中使用 UniPush 二、效果 开源项目uniapp-admin 三、需求 不同角色的用户登陆App,...
  • APP消息推送方案调研

    千次阅读 2017-03-09 09:55:52
    目前行业内有多家消息推送服务供应商,且各家都宣称...为了不被各家推送厂商忽悠,量化消息推送到达率效果,我们需要整理设计一套消息推送服务对比量化方案,一切以线上实测数据为准,通过线上到达率数据进行效果评判。
  • 在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近由于项目...
  • 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式 Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请求API:https://api.jpush.cn/v3/push,另一种则是使用官方提供的第三方Java ...
  • 基于Java的WebSocket推送

    千次阅读 2019-12-23 14:02:34
    关于消息推送,现在的解决方案如轮询、长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据。 其实推送推送主要讲的是一个推的概念,WebSocket是一种主动推送消息的技术。 基于Java的...
  • android推送方案分析

    2013-05-09 11:31:19
    本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案。 方案1、使用GCM服务(Google Cloud Messaging) 简介:...
  • Android集成友盟集成推送方案调研

    千次阅读 2018-11-26 17:49:23
    Android集成友盟集成推送方案调研 鉴于项目apk瘦身的需求,经过调研,发现现有的推送集成方案可以优化。现有的推送方案是华为 + 小米 + 友盟推送,分别针对的是华为(包括荣耀)手机、小米手机、其他类型手机。这样...
  • Android推送方案分析(MQTT/XMPP/GCM)

    千次阅读 2013-08-06 22:07:00
    本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案。  方案1、使用GCM服务(Google Cloud Messaging)  简介...
  • 今天,我将全面介绍Android中实现消息推送的7种主流解决方案 目录 1.本质 应用App 主动向用户推送服务器最新消息 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App...
  • Android推送方案研究

    2014-05-17 23:08:22
    一、 成熟的第三方推送平台 (1)、百度云推送 1、功能介绍:百度云推送服务支持推送三种类型的消息:通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能...
  • 本文介绍在Android中实现推送方式的基础知识及相关解决方案推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息。这种推送...
  • Andriod数据推送方案

    千次阅读 2012-05-01 14:44:56
    在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的...
  • Android推送方案分析(MQTT/XMPP/GCM)

    千次阅读 2016-03-14 12:10:06
    本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案。 方案1、 使用GCM服务(Google Cloud Messaging) 简介:...
  • Android 服务器向客户端推送方案

    万次阅读 2014-04-14 18:55:50
    开发者可以在管理Portal上快捷地向用户推送消息,也可以定制推送的时间、用户群、位置等。还提供远程推送 API。 清晰的推送效果分析图表 开发者可以在管理Portal上查看推送统计信息,直观地评估推送效果...
  • 对目前前后端分离的开发开发的大环境下, 前端使用 vue 进行项目的开发, 后端不在使用以前的 jsp 的开发方式进行开发, 因此造成了对于前端推送方案的选型问题, 在项目的开发过程针对于前后端的开发时间和效率等...
  • 最开始写的androidpdn基于xmpp协议的实现,但是老大说不让java代码跑服务器,没办法,后来又找到国内的极光推送,但是他们使用说明要求写明他们的技术,又放弃,最后看到server端用php写的MQTT方案,但是照着...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,227
精华内容 21,690
关键字:

java推送方案

java 订阅