1、背景javascript
以前項目須要作一個推送功能,最開始我用websocket實現個人功能。使用websocket的好處是免費自主開發,可是有幾個問題:1)瀏覽器的兼容問題,尤爲是低版本的ie;2)由於是推送,至關於從服務器到瀏覽器維護了一個通道,會佔據你的服務器性能;3)上手週期比較長,即便上手,代碼的穩定性也不高,維護也麻煩。由於這樣,因此項目中有關推送的代碼我都無論輕易改動。前端
後來又有個web項目也須要推送,鑑於以上緣由,我使用第三方的推送服務,緣由很簡單,第三方推送服務能夠知足咱們的需求,縮短咱們的開發測試維護成本,術業有專攻,它們在推送方面更有優點,服務質量也有保證!通過對比後,咱們最終決定使用了GoEasy推送。java
GoEasy是一款強大易用的websocket消息推送服務,web端,移動端均可以進行推送,這是個收費的產品,固然提供12個月免費試用期,針對不一樣的併發數量和消息發送條數都有價格明細。它有以下幾個優勢。1)完美支持99.9%的瀏覽器,即便很是古老的IE6,IE7,IE8;2)任何開發語言PHP 、C# 、Java 、Ruby 、Python 、C(++) 、node.js ... 3)它在全球有5—6個數據中心,保證推送的實時可達性,實時高效;4)首創的OTP技術+Https提升消息安全隱私;5)穩定可靠,簡單易用。6)不但支持從服務端到客戶端的推送,還支持從客戶端到客戶端的推送。更多資料能夠去官網http://goeasy.io瞭解。node
2、原理web
只須要肯定哪些用戶須要接收信息,而後讓這些用戶都訂閱一個相同的channel(頻道)。而後再往這個頻道上推送消息便可!全部關鍵在於channel,channel一致,則能夠接收到信息,不然收不到!瀏覽器
對於訂閱必需要的信息有:appkey, channel安全
對於推送必需要的信息有:appkey, channel, content服務器
3、步驟websocket
一、註冊帳號併發
官網地址:http://goeasy.io
二、建立應用
應用分免費版的和收費版(免費版最多隻能建立2個應用),我這裏用的是免費版。建立完應用以後以下圖。
其中。appkey是驗證用戶的有效性的惟一標識。系統會生成兩個keys,一個Super key和一個Subscribe key;它們的區別在於前者既能夠訂閱又能夠推送,但後者只能用於訂閱。
三、前端js代碼
1 <script type="text/javascript" src="http(s)://<CDN Host>/goeasy.js"></script>
2 <script type="text/javascript">
3 var goEasy = new GoEasy({ 4 appkey: "您的app key", 5 onConnected: function () { 6 console.log("成功鏈接GoEasy!"); 7 }, 8 onDisconnected: function () { 9 console.log("與GoEasy鏈接斷開!"); 10 }, 11 onConnectFailed: function (error) { 12 console.log("與GoEasy鏈接失敗,錯誤編碼:" + error.code + "錯誤信息: " + error.content); 13 } 14 }); 15 goEasy.subscribe({ 16 channel:"myChannel", 17 onMessage:function(message){ 18 alert(message.content); 19 } 20 }); 21 </script>
注意:
1)請不要將goeasy.js下載到本地,GoEasy動態爲不一樣瀏覽器和操做系統提供不一樣goeasy.js,使用下載到本地的goeasy.js,將會致使某些用戶不能發送和接收消息。
2)第一行代碼的http(s)表示能夠用http協議,也可使用https協議,通常狀況下使用http就能夠了,http速度快,性能更高。
2)上面代碼中<CDN Host>須要用您應用的CDN Host,如圖1,好比你的CDN Host爲cdn-hangzhou.goeasy.io,
那麼上面第一行代碼爲:<script type="text/javascript" src="http://cdn-hangzhou.goeasy.io/goeasy.js"></script>
4、pom.xml文件中加入GoEasy專有maven庫
1 <repositories>
2 <repository>
3 <id>goeasy</id>
4 <name>goeasy</name>
5 <url>http://maven.goeasy.io/content/repositories/releases/ 6 </url>
7 </repository>
8 </repositories>
9
10 <!--添加依賴-->
11 <dependencies>
12
13 <dependency>
14 <groupId>io.goeasy</groupId>
15 <artifactId>goeasy-sdk</artifactId>
16 <version>0.3.8</version>
17 <dependency>
18
19 <dependencies>
五、java代碼
1 GoEasy goEasy = new GoEasy( "http(s)://<REST Host>」, "my_appkey");
2 goEasy.publish("頻道","消息內容"); 3
4 //好比我使用http協議,個人應用的REST Host爲rest-hangzhou.goeasy.io,那麼上面代碼就是這樣的
5
6 GoEasy goEasy = new GoEasy("http://rest-hangzhou.goeasy.io", "AF-aaaaaa0dddddd5cccccc2d113f444444"); 7 goEasy.publish("myChannel","測試");
若是想實現精準推送,給不一樣的用戶推送不一樣的消息,在頁面獲取當前登陸人id,在後臺發佈頻道時就把id做爲頻道名便可。
4、其餘
用RestAPI進行推送
URL: https://goeasy.io/goeasy/publish
Method: Post
參數:appkey, channel, content
例如:https://goeasy.io/goeasy/publish?appkey={your_appkey}&channel={your_channel}&content={your_message}