Xiqincai

导航

用GoEasy推送实现Java实时推送

前段时间客户有个需求他希望他在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的信息,以前对于类似需求在少量 页面接收的前提下,我一般采用ajax定时去服务器pull信息下来,如果有就显示出来,但是这种方式非常消耗客户端的资源,后来我在网上查询到了一个第 三方的免费推送服务-GoEasy push, 它可以满足我的需求,下面是如何GoEasy进行信息推送及接收:

 

 JAVA Web实时消息后台服务器推送技术

1. 首先我需要在GoEasy官网上注册一个账号,注册完毕后,我可以自己添加application,application添加完成后,GoEasy会自动帮我生成两个key,一个是Common key, 另一个是Subscribe key。

    GoEasy官网:https://goeasy.io

    Common key:用于推送或接收

    Subscribe key:仅用于接收,不能用来推送信息

    这两个key相当于使用GoEasy服务的密码。

2. 在java后台用super key推送客户发布的消息

    2.1. 在开始写代码之前,我们需要从GoEasy官网上下载一个jar包并引入到项目中。

    2.2. 这里不方便展示我们项目的源码,我将用一个JUnit方法来代替:

   public void testPublishMessageInGoEasy(){
   GoEasy goEasy = new GoEasy("your common key");
   goEasy.publish("your_channel","your message");
   }

    注意:这里只能用你的common key, “your_channel”--你可以随意命名(最好是有意义的名字),channel非常重要,它决定到底哪些页面需要接收你发的消息。

3. 在jsp页面里接收推送消息,由于客户要求每个用户在任意页面都需要能接收到该消息,我把接收信息的部分的代码放在了main.jsp,所有的页面都引入了这个jsp页面。下面是在main.jsp接收信息的代码:

    3.1. 引入goeasy.js

           <script type="text/javascript" src="https://cdn.goeasy.io/goeasy-2.13.2.min.js"></script>

    3.2. 初始化GoEasy对象

let goeasy = GoEasy.getInstance({
    host:"hangzhou.goeasy.io",  //若是新加坡区域:singapore.goeasy.io
    appkey:"您的common key",
    modules:['pubsub']//根据需要,传入‘pubsub’或'im’,或数组方式同时传入
});  

    3.3 建立连接

    //建立连接

    goeasy.connect({
        onSuccess: function () {  //连接成功
          console.log("GoEasy connect successfully.") //连接成功
        },
        onFailed: function (error) { //连接失败
          console.log("Failed to connect GoEasy, code:"+error.code+ ",error:"+error.content);
        },
        onProgress:function(attempts) { //连接或自动重连中
          console.log("GoEasy is connecting", attempts);
        }
    });  

 

   3.4  订阅channel (订阅的channel必须与推送消息时的channel一致!)

var pubsub = goeasy.pubsub;
pubsub.subscribe({
    channel: "my_channel",//替换为您自己的channel
    onMessage: function (message) {
        //收到消息
        console.log("Channel:" + message.channel + " content:" + message.content);
    },
    onSuccess: function () {
        console.log("Channel订阅成功。");
    },
    onFailed: function (error) {
        console.log("Channel订阅失败, 错误编码:" + error.code + " 错误信息:" + error.content)
    }
});

代码部分就完成了, 你可以先打开一些页面,然后在运行JUnit 测试方法,可以看到所有打开的页面都收到从Junit test里推送出来的消息。

GoEasy对推送,连接,订阅方法提供了一些回调函数,用于满足我们不同的需求,更多的请参照他们的文档(有中英文版本的哈) https://goeasy.io/www/docs.jsp

也希望这篇文章对其他需要做推送的朋友有帮助!

posted on 2015-12-09 11:55  Xiqincai  阅读(2307)  评论(4编辑  收藏  举报