goEasy消息推送,pushlet 向特写用户实时推送
goEasy
1先去goEasy官网注册goeasy.io,并创建application,得到superKey

2引入js
<script type="text/javascript"src="https://cdn.goeasy.io/goeasy.js"></script>
3实例
<html>
<head>
<base href="<%=basePath%>">
<title>index.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript"src="https://cdn.goeasy.io/goeasy.js"></script>
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript">
var goEasy = new GoEasy({appkey: 'eaf42b8e-b3bdc683b22'});
goEasy.subscribe({
channel: 'nuonuo_shop',
onMessage: function(message){
console.log(message);
alert('接收到消息:'+message.content);//拿到了信息之后,你可以做你任何想做的事
}
});
</script>
<script type="text/javascript">
function sendnews(){
$.post("push/goeasy.do");
}
</script>
</head>
<body>
<input type = "button" value="发消息" onclick="sendnews()"/>
</body>
</html>
下载goeasy-sdk.jar
@RequestMapping(value="/goeasy.do")
private void goeasy() {
GoEasy goEasy = new GoEasy("eaf42b8e-b30a-35bdc683b22");
goEasy.publish("nuonuo_shop", "我试试goeasy");
System.out.println("------goeasy-------");
}
完成。
4总结,一个application 最大连接数60,并且一个月发送+接收信息=10万条,比如推送一条信息,10个浏览器接收,算11条信息。太少。适合小应用
pushlet
1下载pushlet.jar , pushletclient.jar
2修改ajax-pushlet-client.js,在PL对象后加入userId
var PL = {
NV_P_FORMAT: 'p_format=xml-strict', NV_P_MODE: 'p_mode=pull', pushletURL: null, webRoot: null, sessionId: null, STATE_ERROR: -2, STATE_ABORT: -1, STATE_NULL: 1, STATE_READY: 2, STATE_JOINED: 3, STATE_LISTENING: 3, state: 1, userId: '',//添加的userId变量public class MySessionManager extends SessionManager {
@Override
public Session createSession(Event anEvent) throws PushletException {
// TODO Auto-generated method stub
//HttpSession s = ServletActionContext.getRequest().getSession();
//String userid=s.getAttribute("userid")+"";
//return Session.create("xiexianyi");
return Session.create(anEvent.getField("userId", "visitor"));//修改后的写法
}
这是我们就获得的session的id就是我们传送过来的登陆用户userId,getField的第二个参数是当得不到请求参数userId的值的时候设定的默认值。
4配置
web.xml
<servlet>
<servlet-name>pushlet</servlet-name>
<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>pushlet</servlet-name>
<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>
pushlet.properties
sessionmanager.class=com.xiexy.project.test.pushlet.MySessionManager
sources.properties
source1=com.xiexy.project.test.pushlet.HelloWorldEventPullSource$HelloWorldEvent
public class HelloWorldEventPullSource implements Serializable{
private static final long serialVersionUID = 1L;
static public class HelloWorldEvent extends EventPullSource{
@Override
protected Event pullEvent() {
Event event =Event.createDataEvent("/source/event");//事件标识
// 注意:此处”/source/event”将对应页面js代码中的PjoinListen中的参数
event.setField("msg", "hello,world");//封装参数
return event;
}
@Override
protected long getSleepTime() {
return 4000; //隔4秒刷新
}
}
}
5实例
<html>
<head>
<base href="<%=basePath%>">
<title>index.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/ajax-pushlet-client.js"></script>
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<!-- —js 从演示项目的 lib 下copy -->
<script type="text/javascript">
PL.userId='xxy';
PL._init();
PL.joinListen('/task/warn'); //事件标识 在数据源中引用
function onData(event) {
alert(event.get("msg"));
}
</script>
<script type="text/javascript">
function sendnews(){
$.post("push/event.do");
}
</script>
</head>
<body>
<input type = "button" value="发消息" onclick="sendnews()"/>
</body>
</html>
@RequestMapping(value="/event.do")
public String myMulticast() throws Exception {
/**向所有和task/warn名称匹配的事件推送**/
/* Event event = Event.createDataEvent("/task/warn");
event.setField("msg", "Xie XianYi");
Dispatcher.getInstance().multicast(event); // 向所有和task/warn名称匹配的事件推送
System.out.println("向所有和task/warn名称匹配的事件推送");*/
/**向所有的事件推送,不要求和这儿的myevent1名称匹配**/
/* Event event2 = Event.createDataEvent("/guoguo/myevent1"); // 向所有的事件推送,不要求和这儿的myevent1名称匹配
event2.setField("key1", "Broadcast msg");
Dispatcher.getInstance().broadcast(event2);
System.out.println("向所有的事件推送,不要求和这儿的myevent1名称匹配");*/
/**向ID为piero的用户推送*/
Event event3 = Event.createDataEvent("/task/warn");
//event3.setField("msg", "pppp");
event3.setField("msg", new String("中文问题".getBytes("UTF-8"),"ISO-8859-1")); //如查推送的信息为中文,前端JS不会返回信息。key不能是数字(包括数字字符串)
Dispatcher.getInstance().unicast(event3, "xxy"); // 向ID为xxy的用户推送
System.out.println("向ID为xiexianyi的用户推送");
//return event;
return "success";
}
完成。
6总结,比goeasy复杂很多。但是信息没有数量限制。可看项目大小选择。
主要为自己做备忘,同时方便有需要的人。呵呵!
goEasy消息推送,pushlet 向特写用户实时推送的更多相关文章
- php 实时推送代码
网站质量不错的网站可以在百度站长平台/数据提交/sitemap栏目下看到实时推送的功能, 目前这个工具是邀请开放, 百度的实时推送的api接口可以实时推送我们新发布的文章, 保证百度在第一时间收录. ...
- GoEasy消息推送
1. 从GoEasy获取appkey appkey是验证用户的有效性的唯一标识. 注册账号. GoEasy官网:https://goeasy.io 用注册好的账号登录到GoEasy的后台管理系统,创建 ...
- GoEasy实现web实时推送过程中的自动补发功能
熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...
- 用GoEasy推送实现Java实时推送
前段时间客户有个需求他希望他在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的信息,以前对于类似需求在少量 页面接收的前提下,我一般采用ajax定时去服务器pull信息 ...
- 做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知. 笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 Android 篇,iOS 篇入口 ...
- 做推送,怎么能不了解推送的 4 种消息形式呢?(iOS 篇)
极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知.笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 iOS 篇,Android 篇入口. ...
- dwr3+spring实现消息实时推送
最近项目要实现一个消息推送的功能,主要就是发送站内信或者系统主动推送消息给当前在线的用户.每次的消息内容保存数据库,方便用户下次登录后也能看到.如果当前用户在线,收到站内信就主动弹出提示.一开始想到的 ...
- javascript跨域传递消息 / 服务器实时推送总结
参考文档,下面有转载[非常好的两篇文章]: http://www.cnblogs.com/loveis715/p/4592246.html [跨源的各种方法总结] http://kb.cnblogs. ...
- 基于HTTP协议之WEB消息实时推送技术原理及实现
很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...
随机推荐
- 解决ssh localhost中root@localhost:要求输入密码问题(已经进行了无密码设置登录)
首先删除~/.ssh目录下的3个文件,如下 id_rsa authorized_keys id_rsa.pub 然后 exit # 退出刚才的 ssh localhostcd ~/.ssh/ # 若没 ...
- javascript的一些知识
一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...
- VC++/MFC 最常用宏和指令
1.#include指令 包含指定的文件,最基本的最熟悉的指令,编程中不得不用,包含库文件用双尖括号,包含自定义头文件用双引号. 2.#define指令 预定义,通常用它来定义常量(包括无参量与 ...
- box-shadow、drop-shadow 和 text-shadow
1. box-shadow 合阴影, 对象选择器 {box-shadow:[投影方式] X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色} box-shadow属性的参数设置取值: 阴影类型 ...
- POJ 2823 Sliding Window 线段树区间求和问题
题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...
- h5手机页面禁止缩放
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable= ...
- Cocos2dx
初玩Cocos2dx,多多包涵. 感觉版本之间的差异比较大,相对前面的版本来说,3.X更容易上手,更方便了. 一.安装python.我的python-2.7.3.配置环境变量 系统变量里:在Path里 ...
- php备份mysql的代码
1. mydb.php //DB类2. backup.php //备份脚本3. restore.php //还原脚本 mydb.php <?class db{ var $linkid;var $ ...
- Delphi中DBChart的数据库应用
一:属性相关:Series选项: (1)Format页(数据柱的风格) 在Color Each中打勾,就可使用多种颜色显示,color按钮用于设置颜色,Style用于设置图表的风格(Rectangle ...
- Werkzeug工具包学习-官方例子Shortly分析
为了学习werkzeug的wsgi框架工具,今天真对官网的例子进行调试运行.涉及到了werkzeug工具包,jinja2前端模版,以及redis内存库,之后可以灵活定制自己主页.再次,作以记录. 首先 ...