SSM项目使用GoEasy 实现web消息推送服务
一、背景
之前项目需要做一个推送功能,最开始我用websocket实现我的功能。使用websocket的好处是免费自主开发,但是有几个问题:1)浏览器的兼容问题,尤其是低版本的ie;2)因为是推送,相当于从服务器到浏览器维护了一个通道,会占据你的服务器性能;3)上手周期比较长,即使上手,代码的稳定性也不高,维护也麻烦。因为这样,所以项目中有关推送的代码我都不管轻易改动。
后来又有个web项目也需要推送,鉴于以上原因,我使用第三方的推送服务,原因很简单,第三方推送服务可以满足我们的需求,缩短我们的开发测试维护成本,术业有专攻,它们在推送方面更有优势,服务质量也有保证!经过对比后,我们最终决定使用了GoEasy推送。
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了解。
二、原理
只需要确定哪些用户需要接收信息,然后让这些用户都订阅一个相同的channel(频道)。然后再往这个频道上推送消息即可!所有关键在于channel,channel一致,则可以接收到信息,否则收不到!
对于订阅必须要的信息有:appkey, channel
对于推送必须要的信息有:appkey, channel, content
三、步骤
1、注册账号
官网地址:http://goeasy.io
2、创建应用
应用分免费版的和收费版(免费版最多只能创建2个应用),我这里用的是免费版。创建完应用之后如下图。

其中。appkey是验证用户的有效性的唯一标识。系统会生成两个keys,一个Super key和一个Subscribe key;它们的区别在于前者既可以订阅又可以推送,但后者只能用于订阅。
3、前端js代码
<script type="text/javascript" src="http(s)://<CDN Host>/goeasy.js"></script>
<script type="text/javascript">
var goEasy = new GoEasy({
appkey: "您的app key",
onConnected: function () {
console.log("成功连接GoEasy!");
},
onDisconnected: function () {
console.log("与GoEasy连接断开!");
},
onConnectFailed: function (error) {
console.log("与GoEasy连接失败,错误编码:" + error.code + "错误信息: " + error.content);
}
});
goEasy.subscribe({
channel:"myChannel",
onMessage:function(message){
alert(message.content);
}
});
</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库
<repositories>
<repository>
<id>goeasy</id>
<name>goeasy</name>
<url>http://maven.goeasy.io/content/repositories/releases/
</url>
</repository>
</repositories> <!--添加依赖-->
<dependencies> <dependency>
<groupId>io.goeasy</groupId>
<artifactId>goeasy-sdk</artifactId>
<version>0.3.8</version>
<dependency> <dependencies>
5、java代码
GoEasy goEasy = new GoEasy( "http(s)://<REST Host>”, "my_appkey");
goEasy.publish("频道","消息内容"); //比如我使用http协议,我的应用的REST Host为rest-hangzhou.goeasy.io,那么上面代码就是这样的 GoEasy goEasy = new GoEasy("http://rest-hangzhou.goeasy.io", "AF-aaaaaa0dddddd5cccccc2d113f444444");
goEasy.publish("myChannel","测试");
如果想实现精准推送,给不同的用户推送不同的消息,在页面获取当前登录人id,在后台发布频道时就把id作为频道名即可。
四、其他
用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}
SSM项目使用GoEasy 实现web消息推送服务的更多相关文章
- web消息推送-goesay
原文:http://www.upwqy.com/details/22.html 1 GoEasy简介: GoEasy - Web实时消息推送服务专家 最简单的方式将消息从服务器端推送至客户端 最简单的 ...
- WEB消息推送-框架篇
WEB消息推送-comet4j 一.comet简介: comet :基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构.基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程 ...
- 实现web消息推送的技术和采用长轮询corundumstudio介绍
实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...
- 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)
1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...
- 异步tcp通信——APM.Server 消息推送服务的实现
消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...
- Worktile中百万级实时消息推送服务的实现
Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/
- 基于.NetCore2.1。服务类库采用.Net Standard2.0,兼容.net 4.6.1消息推送服务
基于.NetCore2.1.服务类库采用.Net Standard2.0,兼容.net 4.6.1消息推送服务 https://www.cnblogs.com/ibeisha/p/weixinServ ...
- GoEasy实现web实时推送过程中的自动补发功能
熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...
- web消息推送的各种解决办法
摘要 在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知. 往BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如 ...
随机推荐
- C#杂记-隐式类型的局部变量
基础知识:方法中声明的变量,叫局部变量 普通局部变量:有明确数据类型. string name; 隐式类型的局部变量:使用“var”代替明确的数据类型. var name = "abc&qu ...
- Linux下Redis服务器搭建
系统环境 操作系统:CentOS 6.9 redis版本:redis-4.0.2 安装步骤 1,安装预环境 运行以下命令安装预环境. [root@redis02 redis-4.0.2]# yum - ...
- TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)
1.什么是TSP问题 一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市. 城市于城市之间有一个旅行费用,售货员希望旅行费用之和最少. 完全图:完 ...
- 文件类型解析漏洞防御与攻击(PHP)
简介: 解析漏洞主要是一些特殊文件被iis.Apache.Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞,一般的思路都是用图片木马来欺骗服务器,上传webshell,达到提权的目 ...
- SVN系列操作(二)&svn不显示图标的解决方法
接着上一篇文章,我们继续来操作一下SVN: 有同学反馈,我在本地上看到不SVN的图标,先解决一下这个问题. svn不显示图标的解决方法: 1.WIN+R,输入regedit,打开注册表 2.找到HKE ...
- C#实现完整的防盗自制监控系统
在您的手机中通知您家中的入侵者,并拍摄他们的照片 介绍 在本文中,我将展示一些DIY东西,用于安装监控系统,检测家中的入侵者,拍摄照片并通过手机通知您,必要时可以打电话给警察并提供照片以便快速识别 ...
- DVWA 黑客攻防演练(四)文件包含 File Inclusion
文件包含(file Inclusion)是一种很常见的攻击方式,主要是通过修改请求中变量从而访问了用户不应该访问的文件.还可以通过这个漏洞加载不属于本网站的文件等.下面一起来看看 DVWA 中的文件包 ...
- MySQL中Identifier Case Sensitivity
在MySQL当中,有可能遇到表名大小写敏感的问题.其实这个跟平台(操作系统)有关,也跟系统变量lower_case_table_names有关系.下面总结一下,有兴趣可以查看官方文档"Ide ...
- HALCON学习笔记
2019-2-2: 硬件选型--->镜头光源相机选型第一讲.avi: 高斯公式:1/u+1/v=1/f u:物距 v:像距 f:焦距 线放大倍率:像高/物高 或者 像距/物距 镜头需要掌握 ...
- SQLServer之创建标量函数
创建标量函数注意事项 在 SQL Server 和 Azure SQL Database 中创建用户定义函数. 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的 Trans ...