黑马程序员技术交流社区

标题: 【太原校区】Pushlet之消息推送(二) [打印本页]

作者: 郝永亮    时间: 2019-1-15 16:54
标题: 【太原校区】Pushlet之消息推送(二)
本帖最后由 郝永亮 于 2019-1-15 16:58 编辑

在前面一篇文章中我们介绍了使用使用pushlet进行简单的消息推送。在实际的业务中,我们往往需要向特定的一个或者一类用户进行消息推送。关键便是修改了Pushlet创建的sessionId以便可以自由控制向某一个特点前台推送信息,下面看一下具体的实现过程。
具体实现修改源码
[Java] 纯文本查看 复制代码
public Session createSession(Event anEvent) throws PushletException {  
    // Trivial  
    //return Session.create(createSessionId());  
    //当userId为空时,默认为“visitor”
    return Session.create(anEvent.getField("userId", "visitor"));  
}
修改ajax-pushlet-client.js
[JavaScript] 纯文本查看 复制代码
if (anEvent == 'join' || anEvent == 'join-listen') {  
    url = url + '&userId=' + PL.userId;   
}
  页面添加监听事件
[JavaScript] 纯文本查看 复制代码
var userIdDate = '${session.uinfo.currentUserId}';
PL.userId = userIdDate;
//PL._init(); // 如果不注释掉这句话有时消息无法推送成功
PL.joinListen("/msg/notify");

function onData(event) {
    alert(event.get("msg"));
}

给特定用户发送推送
[AppleScript] 纯文本查看 复制代码
/**
* 推送
* @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;
}

   
常见问题pushlet源码打包失败
【错误】在运行build.xml  -> ant build的时候,提示jre 版本在1.7一下是不支持的。

【解决】 在buid.xml 上右键,点击run as  -> External Tools Configuations...  ,选择JRE选项卡,更改jre版本在1.7或以上即可。
中文乱发消息推送失败
【解决】 将中文字符进行编码处理即可。
new String("您收到一条代办任务".getBytes("UTF-8"),"ISO-8859-1")
处理离开状态消息推送失败
【错误】 [Subscriber] not alive for at least: 45000ms, leaving...
【解决】去掉页面中PL._init();即可。







作者: 一个人一座城0.0    时间: 2019-1-16 09:15
看一看。
作者: cuichang1    时间: 2019-1-16 11:51

作者: Julien27    时间: 2019-1-18 12:13
第一篇 见 http://bbs.itheima.com/forum.php ... p;highlight=pushlet




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2