GoEasy
1.GoEasy介绍
GoEasy专注于服务器与浏览器,浏览器与浏览器之间消息推送,完美兼容世界上的绝大多数浏览器,包括IE6, IE7之类的非常古老的浏览器。 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了解。
官网:https://goeasy.io/www/home , 官网有文档(有中文文档)和demo, 下面记录一下我使用的步骤:
2.使用步骤
2.1.官网注册账号
账号:@.com 密码:aaa
2.2.新建一个免费的application,其中application name就是下面的channel,这时,系统会分配给你appkey
应用分免费版的和收费版(免费版最多只能创建2个应用),我这里用的是免费版。创建完应用之后如下图。
其中。appkey是验证用户的有效性的唯一标识。系统会生成两个keys,一个Super key和一个Subscribe key;它们的区别在于前者既可以订阅又可以推送,但后者只能用于订阅。
App keys:
2.3.导入SDK
Javascript:
1 <script type="text/javascript" src="http(s)://<CDN Host>/goeasy.js"></script> 2 <script type="text/javascript"> 3 var goEasy = new GoEasy({ 4 appkey: "您的app key" 5 }); 6 goEasy.subscribe({ 7 channel:"myChannel", 8 onMessage:function(message){ 9 alert(message.content); 10 } 11 }); 12 </script>
只听到从知秋君办公室传来知秋君的声音: 招招舟子,人涉卬否。有谁来对上联或下联?
注意:
- 请不要将goeasy.js下载到本地,GoEasy动态为不同浏览器提供不同内容的goeasy.js,使用下载到本地的goeasy.js,将会导致某些浏览器 不能发送和接收消息。
- 如果您的应用程序需要支持Windows XP用户, 请务必使用HTTP来获取js文件,GoEasy将于2016年9月22日升级所有 SSL证书至SHA-2,届时起Windows XP用户将无法通过HTTPS连接GoEasy。
Java
方式一: 手动下载sdk
goeasy-sdk.jar
下载依赖包: gson-2.3.1.jar, slf4j-api-1.7.2.jar
方式二: Maven
添加goeasy仓库到您的pom.xml文件:
此代码由一叶知秋网-知秋君整理<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>
3.服务器发送(发布)消息
RESTful API
URL:
此代码由一叶知秋网-知秋君整理http(s)://<REST Host>/publish
Method:
Post
参数:
名称 必要 描述
appkey 是 您的appkey
channel 是 channel
content 是 您要发送的消息内容
返回值:
{ "code" : 200, "content" : "OK" } Copy
返回值说明
Code Content 状态
200 OK 成功
401 Unauthorized app key app key错误或者过期
400 <具体错误信息> 参数错误或不完整
408 Unreachable or timeout 发送数据到GoEasy失败,可能是因为网络原因,不能与GoEasy建立连接
500 Internal Server Error GoEasy服务器错误
900 Over max concurrent connections 超过最大连接数
901 No remain messages 消息数量已用完
902 Please encode parameters with utf8 restful请求参数没有使用utf8进行编码
999 Your GoEasy application is expired,please contact your administrator to renew it 您的GoEasy application已经过期,请联系您们的管理人员对其进行续费
对于服务器端,目前GoEasy仅提供Java 的SDK, 未来会提供更多其他语言的SDK,敬请期待。
4.浏览器发送(发布)消息和接收消息
4.1.发送(发布)消息
Java
GoEasy goEasy = new GoEasy( "http(s)://<REST Host>", "my_appkey"); goEasy.publish("my_channel","Hello, GoEasy!");
JavaScript
var goEasy = new GoEasy({ appkey: "my_appkey" }); //GoEasy-OTP可以对appkey进行有效保护,详情请参考 goEasy.publish({ channel: "my_channel", message: "Hello, GoEasy!" });
GoEasy-OTP
4.2.接收(订阅)消息
JavaScript
var goEasy = new GoEasy({ appkey: "my_appkey" }); goEasy.subscribe({ channel: "my_channel", onMessage: function (message) { alert("Channel:" + message.channel + " content:" + message.content); } });
4.3.取消订阅
JavaScript
goEasy.unsubscribe ({ channel: "my_channel" });
4.4代码测试
后台发送(发布)消息
//代码测试 @Test public void Test(){ // 参数:服务器地址 , AppKey:commonKey GoEasy goEasy = new GoEasy( "http://rest-hangzhou.goeasy.io", "BC-78534f92f1204dd595be0e4cbdb8714b"); //参数:管道标识,发送内容 goEasy.publish("my_channel","Hello, GoEasy!"); }
jsp页面接收(订阅)消息
<--代码测试--> <script src="http://cdn-hangzhou.goeasy.io/goeasy.js"></script> <script type="text/javascript"> var goEasy = new GoEasy({ appkey: "BC-78534f92f1204dd595be0e4cbdb8714b"}); goEasy.subscribe({ channel: "my_channel", onMessage: function (message) { alert("Channel:" + message.channel + " content:" + message.content); } }); </script>
动态echarts演示
@Test public void Test2(){
while(true){
Random random = new Random();
int[] a={random.nextInt(10),random.nextInt(15),random.nextInt(20),random.nextInt(30),random.nextInt(10)};
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", a);
String s = jsonObject.toJSONString();
// 参数:服务器地址 , AppKey:commonKey
GoEasy goEasy = new GoEasy( "http://rest-hangzhou.goeasy.io", "BC-78534f92f1204dd595be0e4cbdb8714b");
//参数:管道标识,发送内容
goEasy.publish("my_channel",s);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
<html>
<head>
<!-- 引入 echarts.js -->
<script src="${pageContext.request.contextPath}/js/echarts.min.js"></script>
<script type="text/javascript" src="../js/jquery.min.js"></script>
<script src="http://cdn-hangzhou.goeasy.io/goeasy.js."></script>
<script type="text/javascript">
$(function(){
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
var goEasy = new GoEasy({ appkey: "BC-78534f92f1204dd595be0e4cbdb8714b"});
goEasy.subscribe({
channel: "my_channel",
onMessage: function (message) {
var data=JSON.parse(message.content);
//console.log(data);
// 指定图表的配置项和数据
var option = {
//标题
title: {
text: "每月注册用户统计图"
},
tooltip: {}, //鼠标提示
legend: { //选项卡
data:['柱状图','折线图']
},
xAxis: { //横坐标
data: ["衬衫","毛衣","鞋子","裤子","袜子"]
},
yAxis: {}, //纵坐标
series: [{ //数据系列
name: "柱状图", //选项卡名字
type: 'bar', //柱状图
data: data.data
},{ //数据系列
name: "折线图",
type: 'line', //折线图
data: data.data
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
});
});
</script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
</html>