前段時間客戶有個需求他希望他在后台管理頁面發布一個消息,所有用這個系統的用戶無論在哪個頁面都能及時收到他發布的信息,以前對於類似需求在少量頁面接收的前提下,我一般采用ajax定時去服務器pull信息下來,如果有就顯示出來,但是這種方式非常消耗客戶端的資源,后來我在網上查詢到了一個第三方的免費推送服務-GoEasy push, 它可以滿足我的需求,下面是如何用GoEasy進行信息推送及接收:
1. 首先我需要在GoEasy官網上注冊一個賬號,注冊完畢后,我可以自己添加application,application添加完成后,GoEasy會自動幫我生成兩個key,一個是Super key, 另一個是Subscribe key。
GoEasy官網:https://goeasy.io
Super key:用於推送或接收
Subscribe key:僅用於接收,不能用來推送信息
這兩個key相當於使用GoEasy服務的密碼。
2. 在java后台用super key推送客戶發布的消息
2.1. 在開始寫代碼之前,我們需要從GoEasy官網上下載一個jar包並引入到項目中。
2.2. 這里不方便展示我們項目的源碼,我將用一個JUnit方法來代替:
public void testPublishMessageInGoEasy(){
GoEasy goEasy = new GoEasy("your super key");
goEasy.publish("your_channel","your message");
}
注意:這里只能用你的super 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.js"></script>
3.2. 初始化GoEasy對象並訂閱channel (訂閱的channel必須與推送消息時的channel一致!)
var goeasy = new GoEasy({
appkey: 'your super key or your subscribe key',
});
goeasy.subscribe({
channel: 'your_channel',
onMessage: function (result) {
alert("You hava a new message: " + result.content);
}
});
代碼部分就完成了, 你可以先打開一些頁面,然后在運行JUnit 測試方法,可以看到所有打開的頁面都收到從Junit test里推送出來的消息。
GoEasy對推送,連接,訂閱方法提供了一些回調函數,用於滿足我們不同的需求,更多的請參照他們的文檔(有中英文版本的哈) https://goeasy.io/www/docs.jsp
也希望這篇文章對其他需要做推送的朋友有幫助!