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# 跨进程 设置窗口owner
窗口间跨进程通信 1. 发送方 public const int WM_InsertChart_Completed = 0x00AA; //查找窗口 [DllImport("User32.d ...
- [PHP] yield沟通函数循环内外
1.yield是函数内外,循环内外沟通用的 , 当你的函数需要返回一个大数组 , 循环的时候需要遍历这个大数组时 , 并且需要多次遍历这个函数的返回值 , 这个是有用的 2.当我也是只需要在一次循环中 ...
- CentOS下RabbitMq高可用集群环境搭建
准备工作 1,准备两台或多台安装有rabbitmq-server服务的服务器 我这里准备了两台,分别如下: 192.168.40.130 rabbitmq01192.168.40.131 rabbit ...
- java框架之springboot
快速入门 一.helloworld示例 二.springboot单元测试 三.springboot热部署 web开发 整合redis thymeleaf使用 spring-data-jpa使用 整合m ...
- Numpy数组数据文件的读写
一.引言 读写数据文件的重要性就不必多说了. 二.读取列表形式数据的文件 1.我们写几行CSV格式(列表形式,两值之间逗号隔开)的数据. id,height,age 1,175,20 2,168,18 ...
- RelativeLayout设置wrap_content无效
尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8419053.html 在做项目的过程中,遇到了一个奇怪的现象,我设置RelativeLayout为的宽 ...
- Docker Data Center系列(一)- 快速搭建云原生架构的实践环境
本系列文章演示如何快速搭建一个简单的云原生架构的实践环境. 基于这个基础架构,可以持续部署微服务架构的应用栈,演练敏捷开发过程,提升DevOps实践能力. 1 整体规划 1.1 拓扑架构 1.2 基础 ...
- Centos7VMware虚拟机最小化安装后,安装Tenda U12 USB无线网卡驱动
前几天买下了Tenda U12 USB 无线网卡 ,想连接上无线玩玩,可惜买下折腾了一周才解决他它驱动问题,前后在VMware上装了十多次,测试了好几个内核版本才搞定,好了废话不多说,分享下我安装过程 ...
- centos简单的后台运行
# 忽略输出文件 nohup java FileTest > /dev/null 2>&1 &
- pymysql的使用
import pymysql #打开数据库 (如果连接失败会报错)#db = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'minb ...