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


Posted in Javascript onNovember 04, 2016

越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!

浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari等等。

支持不同的开发语言:GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restful API来实现后台实时推送。如:Java,PHP, C#, Ruby, Python, C, C++, ASP.NET,Node.js...

支持后台及前台推送: 后台用Restful API, 前台用goeasy.js; 运用十分简单!

下面我介绍一下使用GoEasy的步骤:

 1. 你需要到goeasy官网上注册一个账号,并创建一个应用,应用创建好后系统会默认为它生成两个key: publish key和subscribe key

 2. 前台实时订阅及接收

只需要引入goeasy.js,然后调用goeasy的subscribe方法订阅一个channel即可,订阅时无论是用publish key还是subscribe key都可以。通过subscribe的参数 onMessage的回调函数可以实时接收到消息。

 3. 前台实时推送

还是需要引入goeasy.js(如果该页面已经引入了可不在引入),然后调用goeasy的publish方法向已订阅的channel上推送消息即可,推送时只能用publish key。

 4. 后台实时推送

调用GoEasy Restful API, 用post方式访问http://goeasy.io/goeasy/publish, 同时还需要带上三个必要参数:

  • appkey: publish key
  • channel: 你订阅了的channel
  • content: 推送内容

 就是这么简单。

推送的原理:GoEasy的实现原理很简单,就是推送消息的一端只负责推送,而需要接收的页面需要预先订阅。订阅什么呢?订阅channel。往 某个channel上推送消息,客户端就订阅相同的channel,这样就可以确保准确接收。通过channel我们可以自己指定哪些页面或哪些用户可以 接收到从这个channel上推送出来的消息。

下面我将之前写的一个小实例贴出来,里面用了Javascript 在web页面进行订阅,推送,接收,以及取消订阅的例子,里面的appkey用的是goeasy官方的demo 的appkey.

<html>
<head>
<title>GoEasy Test</title>

<script type="text/javascript" src="https://cdn.goeasy.io/goeasy.js"></script>
<script type="text/javascript">
  if(typeof GoEasy !== 'undefined'){
    var goEasy = new GoEasy({
      appkey: 'ba821151-e043-4dfb-a954-c73744c8d323',
      userId:"222",
      username:"22",
      onConnected:function(){
        console.log("Connect to GoEasy success.");
      } ,
      onDisconnected:function(){
        console.log("Disconnect to GoEasy server.");
      } ,
      onConnectFailed:function(error){
        console.log("Connect to GoEasy failed, error code: "+ error.code+" Error message: "+ error.content);
      }
    });
  }
      
  subscribe();
  function subscribe(){
       goEasy.subscribe({
        channel: 'notification',
        onMessage: function(message){
          console.log('Meessage received:'+message.content);
        },
        onSuccess:function(){

          console.log("Subscribe the Channel successfully.");

        },

        onFailed: function(error){

          console.log("Subscribe the Channel failed, error code: "+ error.code + " error message: "+ error.content);

        }

      });

  }
      
   function publishMessage(){
     goEasy.publish({
        channel: 'notification',
        message: 'You received a new notification',
        onSuccess:function(){

          console.log("Publish message success.");

        },
        onFailed: function(error){

          console.log("Publish message failed, error code: "+ error.code +" Error message: "+ error.content);

        }
      });
   
   }
         
   function unsubscribe(){
        goEasy.unsubscribe({
          channel:"notification",
          onSuccess: function(){

            console.log("Cancel Subscription successfully.");

          },
          onFailed: function(error){

            console.log("Cancel the subscrition failed, error code: "+ error.code + "error message: "+ error.content);
          }

        });
      }
    
 </script>
</head>
<body>
 <input type="button" value="publish" onclick="publishMessage()"/>
 <input type="button" value="unsubscribe" onclick="unsubscribe()"/>
 <input type="button" value="subscribe" onclick="subscribe()"/>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE中jscript/javascript的条件编译
Sep 07 Javascript
jQuery EasyUI 中文API Button使用实例
Apr 14 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
javascript的几种写法总结
Sep 30 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
使用Mock.js生成前端测试数据
Dec 13 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 #Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 #Javascript
AngularJS过滤器filter用法实例分析
Nov 04 #Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 #Javascript
Angular页面间切换及传值的4种方法
Nov 04 #Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 #Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 #Javascript
You might like
短波问题解答
2021/02/28 无线电
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Python中Selenium库使用教程详解
2020/07/23 Python
python实现邮件循环自动发件功能
2020/09/11 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
捷科时代的软件测试笔试题
2015/11/09 面试题
大专生的学习自我评价
2013/12/04 职场文书
地方白酒代理协议书
2014/10/25 职场文书
《秋思》教学反思
2016/02/23 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript