具体实现修改源码在前面一篇文章中我们介绍了使用使用pushlet进行简单的消息推送。在实际的业务中,我们往往需要向特定的一个或者一类用户进行消息推送。关键便是修改了Pushlet创建的sessionId以便可以自由控制向某一个特点前台推送信息,下面看一下具体的实现过程。
public Session createSession(Event anEvent) throws PushletException {
// Trivial
//return Session.create(createSessionId());
//当userId为空时,默认为“visitor”
return Session.create(anEvent.getField("userId", "visitor"));
}
var PL = {
userId:'', //添加userId变量
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,
if (anEvent == 'join' || anEvent == 'join-listen') {
url = url + '&userId=' + PL.userId;
}
var userIdDate = '${session.uinfo.currentUserId}';
PL.userId = userIdDate;
//PL._init(); // 如果不注释掉这句话有时消息无法推送成功
PL.joinListen("/msg/notify");
function onData(event) {
alert(event.get("msg"));
}
/**
* 推送
* @param oid
* @throws UnsupportedEncodingException
*/
private String void myMulticast() throws UnsupportedEncodingException {
//获取符合条件的userId,此处省略具体逻辑
String userId = ...;
Event event = Event.createDataEvent("/msg/notify");
event.setField("msg", new String("您收到一条代办任务".getBytes("UTF-8"),"ISO-8859-1"));
Dispatcher.getInstance().unicast(event, userId); // 向event名称匹配的事件,并且sessionid为指定的userIdDate推送
return null;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |