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 相关文章推荐
传智播客学习之JavaScript基础篇
Nov 13 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
Javascript 运动中Offset的bug解决方案
Dec 24 Javascript
jquery实现的用户注册表单提示操作效果代码分享
Aug 28 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
基于JS实现带动画效果的流程进度条
Jun 01 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
Vue项目安装插件并保存
Jan 28 Javascript
js实现石头剪刀布游戏
Oct 11 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
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
python实现快递价格查询系统
2020/03/03 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
J2EE面试题
2016/03/14 面试题
高级电工工作职责
2013/11/21 职场文书
企业军训感言
2014/02/08 职场文书
领导班子四风表现材料
2014/08/23 职场文书
政风行风评议整改方案
2014/09/15 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers