之前项目需要做一个推送功能,最开始我没有想过用第三方推送服务。想着可以用已知技术方式完成,例如定时到服务器看看是否有新的消息,有的话,就读取下来并显示,但是这种方式很浪费客户以及服务器的资源,当然这种方式在我们项目里是不可取的。再后来我在网上搜了一些,说是可以用web socket实现我的功能,但是我在网上查了一下使用方式,看了一上午一头雾水。即使我可以一周两周内用websocket实现我的推送,那我又拿什么来保证我自己写的推送程序的到达率和速度呢?维护成本一定也会随着增加!况且我们也不允许花太多开发成本在这个项目上!

经过上面的一番周折后,我跟项目组提出使用第三方的推送服务,原因很简单,第三方推送服务可以满足我们的需求,缩短我们的开发测试维护成本,术业有专攻,它们在推送方面更有优势,服务质量也有保证!经过几番对比后,我们最终决定使用了GoEasy推送。 它真正的从根本上解决了我们的问题!对于他们的服务质量很满意,注册成功后,你可以获得他们的联系方式,问题处理得很及时,不像有些公司的客服,发封邮件好几天都没有任何信息!从而也解决了我们的后顾之忧!

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

 

废话不多说,直接进入正题,如何实现:

1. 从GoEasy获取appkey

appkey是验证用户的有效性的唯一标识。

  • 注册账号。 GoEasy官网:http://goeasy.io
  • 用注册好的账号登录到GoEasy的后台管理系统,创建您自己应用(application).
  • Application创建好之后系统会自动为您生成appkey

系统会生成两个keys,一个Super key和一个Subscribe key;它们的区别在于前者既可以订阅又可以推送,但后者只能用于订阅。

2. GoEasy实现向特定用户群推送的原理

知道了他们的推送原理,可以更加方便我们了解他们的服务,以及理解我们写的代码。其实原理很简单,只需要确定哪些用户需要接收信息,然后让这些用户都订阅一个相同的channel(频道)。 然后再往这个平台上推送消息即可!所有关键在于channel,channel一致,则可以接收到信息,否则收不到!

对于订阅必须要的信息有:Appkey, channel

对于推送必须要的信息有:Appkey, channel, content

3. 用GoEasy实现订阅(接收)的实例

 1  <script type="text/javascript" src="https://cdn.goeasy.io/goeasy.js"></script>
 2 
 3                     <script type="text/javascript">
 4             var goEasy = new GoEasy({appkey: 'your appkey'});
 5                                goEasy.subscribe({
 6                         channel: 'your_channel',
 7                         onMessage: function(message){
 8                             alert('接收到消息:'+message.content);//拿到了信息之后,你可以做你任何想做的事
 9                         }
10               });
11   </script>     

   有了这几行代码后,只要保证网络畅通的情况下,页面会自动弹出你从任何平台上推送的信息。

4. 用GoEasy实现推送及接收的实例

目前GoEasy支持三种推送方式: Java后台推送(它们有提供JAVA SDK和 maven远程仓库), JS推送,RestAPI推送(有了RestAPI,我们就可以用PHP, .NET, Ruby…来推送信息了,很方便)

 

说了这么多,来我们看一下怎么用GoEasy的三种方式分别实现推送吧。

4.1. 用GoEasy SDK推送

1. Java SDK的获取方式,方式一,直接在goeasy的官网上进行下载;方式二,用maven远程库直接导入到项目中。尽管官网上已经做了相同的说明了,我这里还是把关键点帖出来,方便大家查看。

GoEasy SDK下载链接:http://maven.goeasy.io/service/local/artifact/maven/redirect?r=releases&g=io.goeasy&a=goeasy-sdk&v=0.3.3&e=jar

   GoEasy远程maven库的配置:

 1           <repository>
 2               <id>goeasy</id>
 3               <name>goeasy</name>
 4               <url>http://maven.goeasy.io/content/repositories/releases/</url>
 5          </repository>
 6  7           <dependency>
 8                <groupId>io.goeasy</groupId>
 9                <artifactId>goeasy-sdk</artifactId>
10                <version>0.3.3</version>
11          </dependency>

 

      需要注意的是:GoEasy需要依赖两个额外的jar 包:
      gson.jar : http://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar
      slf4j-api.jar : http://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jar
 2. 实例化GoEasy对象
1 GoEasy goEasy = new GoEasy("your appkey");

 

c. 推送消息
1 goEasy.publish('your_channel', 'First message');

 

4.2. JS推送

a.       引入goeasy.js
1 <script type="text/javascript" src="https://cdn.goeasy.io/goeasy.js"></script>

 

b.       实例化Goeasy对象,并用publish函数进行推送
1 <script type="text/javascript">
2        var goEasy = new GoEasy({appkey: 'your appkey'});
3                goEasy. publish ({
4                     channel: 'your_channel', 
5                     message: 'Second message!'
6        });
7  </script>

 

4.3. 用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}
 
GoEasy官网:http://goeasy.io
快速入门:http://goeasy.io/www/started
文档下载:http://goeasy.io/www/documents