pushlet给特定用户,分组,群发推送消息(新手亲测,解决新手使用遇到的困难!)
2014-10-01 23:05
330 查看
首先这是第一次写,可能有各种问题,希望大神们指出和谅解下。这里的亮点可能会很详细,因为作为新生的我发现,网上虽然很多资源优秀,但是对于新手来说,会出现各种问题,比如运行都不会....本人经历过,这篇文章就教新手如何写,理解,正确运行!也算是无聊的程序员屌丝,国庆没机会出去,只能宅宿舍的打发时间。好,废话不多说,进入正题!
一、pushlet新手入门
可以去看下这个http://cuisuqiang.iteye.com/blog/1416771通过这个找下成就感。我用JavaEE导入的mypushlet的时候会出现部署上的问题,无法用Tomcat启动,不过不用着急,代码都可以运行的,至少我亲测,可以自己重新建一个动态的WEB项目。然后按照上面的加代码和文件就成功了。
二、功能介绍
在Spring,SpringMvc,Hibernate,Maven(主要用于加包),前台用到js,jquery,jsp,el表达式,jstl。不用害怕啥的,以前我也看到这么多就会恐惧,我一定会让你觉得简单但是又高大上!前台主要是用到Jquery-UI中的dialog。大概需求就是:当系统出现不好状态时,就向特定的用户,分组,群,发送消息。简单说,就是弹出个框,然后说明问题是什么,再来一个文字链接跳转。
三、***步骤
1.大致目录结构
新建一个maven项目或者普通的动态web项目,maven的话,在pom文件中将log4j.jar加入引用就好了。普通的就直接网上下载一个加入项目中。MyPushlet是个消息推送类。后面会把它配置成servlet。当时自己就在它身上纠结好久....一直奇怪,代码都没问题,为啥不能运行。后面发现需要一个方法调用它,你可以手动调用或者写进代码。我就先手动调用。后面再解释。
2.web.xml代码如下(用于配置servlet,以前不清楚,只会用...):
3.修改pushlet的java源代码,找到nl.justobjects.pushlet.core包下的SessionManager类,将它的createSession方法改成,我上传的pushlet源码是已经修改好的:
用来获取session中的id,是从后台的userId,而不是特定的字符串,这样就能指定特定的用户,给你想让他接收的人发送。
4.修改ajax-pushlet-client.js
很多方法都是在里面实现和调用的,想详细了解的可以多看看,这里,我就不一一解释了,相信你如果看,一定会看懂的。啥事都不难,难的是有心人。PL对象,在它的最开始添加一个属性userId:'', ,因为分析ajax-pushlet-client.js之后会发现,所有的请求都是get方式,也就是说是将请求参数添加到url里的,我们要做的是在 进行join请求的时候将userId加到url上。找到var url = PL.pushletURL + '?p_event=' + anEvent;这一行。标特殊颜色都是新加的。
然后就修改好了,把它放在合适的文件夹就可以引用了。这里新手会出现问题,至少我出现过,而且也纠结了好半会....
5.index.jsp代码(html也差不多)
a.设置路径(框架需要设置,如果是普通的没用到框架就忽略)
<c:set var="path" value="${pageContext.request.contextPath }"></c:set>
b.引用资源文件
<!-- <script type="text/javascript" src="resource/js/ajax-pushlet-client.js"></script> --><!-- 普通引用用这种方式 -->
c.写一个JS
6.pushlet推送类代码
7.重点注意事项!!
a.直接运行项目默认index.jsp,你会发现什么效果都没有。这个可能是你资源没用引用争取。强力推荐火狐!使用火狐,如果你前台代码出错,你查看页面源代码会有红色的标记。另外使用火狐F12或者直接右键选择查看元素,然后找到网络,点击网络,然后点击分析最后就出现一个界面,然后查看页面是否使用到js或者样式啥的。
8.应该还不行的!你还没有调用方法使用它。你可以选择手动调用,或者自己再代码里加。简单的就是在重新打开一个页面输入:localhost:8080/push/MyPushlet然后在index页面就会出现一个弹出框!当时自己不知道使用...也纠结了好久。以为直接运行就会有效果。就是你必须收到调用你配置的servlet方法,才会有效果。前面的入门,是代码里面作者自己定义,服务器启动就调用。
欢迎各种吐槽,新手第一次写。。。。后面会好好改进!!
一、pushlet新手入门
可以去看下这个http://cuisuqiang.iteye.com/blog/1416771通过这个找下成就感。我用JavaEE导入的mypushlet的时候会出现部署上的问题,无法用Tomcat启动,不过不用着急,代码都可以运行的,至少我亲测,可以自己重新建一个动态的WEB项目。然后按照上面的加代码和文件就成功了。
二、功能介绍
在Spring,SpringMvc,Hibernate,Maven(主要用于加包),前台用到js,jquery,jsp,el表达式,jstl。不用害怕啥的,以前我也看到这么多就会恐惧,我一定会让你觉得简单但是又高大上!前台主要是用到Jquery-UI中的dialog。大概需求就是:当系统出现不好状态时,就向特定的用户,分组,群,发送消息。简单说,就是弹出个框,然后说明问题是什么,再来一个文字链接跳转。
三、***步骤
1.大致目录结构
新建一个maven项目或者普通的动态web项目,maven的话,在pom文件中将log4j.jar加入引用就好了。普通的就直接网上下载一个加入项目中。MyPushlet是个消息推送类。后面会把它配置成servlet。当时自己就在它身上纠结好久....一直奇怪,代码都没问题,为啥不能运行。后面发现需要一个方法调用它,你可以手动调用或者写进代码。我就先手动调用。后面再解释。
2.web.xml代码如下(用于配置servlet,以前不清楚,只会用...):
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>pushlet</servlet-name> <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet> <servlet-name>MyPushlet</servlet-name> <servlet-class>com.up.pushlet.MyPushlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>pushlet</servlet-name> <url-pattern>/pushlet.srv</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MyPushlet</servlet-name> <url-pattern>/MyPushlet</url-pattern> </servlet-mapping> </web-app>
3.修改pushlet的java源代码,找到nl.justobjects.pushlet.core包下的SessionManager类,将它的createSession方法改成,我上传的pushlet源码是已经修改好的:
public Session createSession(Event anEvent) throws PushletException { // Trivial //return Session.create(createSessionId()); return Session.create(anEvent.getField("userId", "visitor")); }
用来获取session中的id,是从后台的userId,而不是特定的字符串,这样就能指定特定的用户,给你想让他接收的人发送。
4.修改ajax-pushlet-client.js
很多方法都是在里面实现和调用的,想详细了解的可以多看看,这里,我就不一一解释了,相信你如果看,一定会看懂的。啥事都不难,难的是有心人。PL对象,在它的最开始添加一个属性userId:'', ,因为分析ajax-pushlet-client.js之后会发现,所有的请求都是get方式,也就是说是将请求参数添加到url里的,我们要做的是在 进行join请求的时候将userId加到url上。找到var url = PL.pushletURL + '?p_event=' + anEvent;这一行。标特殊颜色都是新加的。
var PL = { NV_P_FORMAT: 'p_format=xml-strict', NV_P_MODE: 'p_mode=pull', <span style="color:#ff0000;">userId:'',</span> 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,
// Construct base URL for GET var url = PL.pushletURL + '?p_event=' + anEvent; //var userid = getMenuValue("userid"); <span style="color:#ff0000;">//设置userId if (anEvent == 'join' || anEvent == 'join-listen') { url = url + '&userId=' + PL.userId; } </span>
然后就修改好了,把它放在合适的文件夹就可以引用了。这里新手会出现问题,至少我出现过,而且也纠结了好半会....
5.index.jsp代码(html也差不多)
a.设置路径(框架需要设置,如果是普通的没用到框架就忽略)
<c:set var="path" value="${pageContext.request.contextPath }"></c:set>
b.引用资源文件
<script src="${path}/resource/js/ajax-pushlet-client.js"></script> <script src="${path}/resource/js/jquery-1.7.2.min.js"></script> <script src="${path}/resource/js/jquery-ui.js"></script> <link href="${path}/resource/js/jquery-ui.css" rel="stylesheet">
<!-- <script type="text/javascript" src="resource/js/ajax-pushlet-client.js"></script> --><!-- 普通引用用这种方式 -->
c.写一个JS
<script type="text/javascript"> PL.webRoot = ""; if (PL.sessionId == null) { PL.userId='${user.userName}';//用EL表达式选择用户名,如果没用到的, //可以自己直接定义如:“PL.userId="liu"” } PL._init(); PL.joinListen('myevent1'); function onData(event) { var msg = event.get("key1");//获取后台定义消息推送的内容 /* alert(msg); */ isOnclick(msg); } function isOnclick(msg) { var msg2 = $("#dialog").html();//利用Jquer-ui的dialog,选择id为dialog标签的内容赋给msg2。主要是为了放链接,方便跳转 $("#dialog").html(msg2+msg);//让推送的弹出框显示后台消息和自己定义的 $("#dialog").dialog({ //自己可以去了解下Jquer-ui的dialog,简单的话可以直接有alert,不过它 modal : true, buttons : { Ok : function() { $(this).dialog("close"); } } }); } </script>
</pre><p></p><p><span style="font-size:18px">d.HTML里面的body内容</span></p><p style="background:rgb(240,240,240)"></p><pre name="code" class="html"><div id="dialog" title="MyFirstPushlet" style="display: none"> <a href="${path}/" title="讨论区">讨论区</a> <p> 我的第一个消息推送。上面href是链接,你可以自己定义。 </p> </div>
6.pushlet推送类代码
package com.up.pushlet; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import nl.justobjects.pushlet.core.Dispatcher; import nl.justobjects.pushlet.core.Event; import nl.justobjects.pushlet.core.SessionManager; public class MyPushlet extends HttpServlet { /* protected long getSleepTime() { return 1000; } */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { myUnicast(); myMulticast(); myBroadcast(); } private void myUnicast() throws UnsupportedEncodingException { HttpServletRequest request; if(SessionManager.getInstance().hasSession("liu")){ Event event = Event.createDataEvent("myevent1"); String str = "推送特定成员消息hhhh"; str =new String(str.getBytes("UTF-8"),"ISO-8859-1"); //解决中文问题,原始的是不能推送中文字符 event.setField("key1", str); Dispatcher.getInstance().unicast(event,"liu"); //向ID为liu的用户推送 System.out.println("success!!"); } else { System.out.println("liu do not login....0000000000000000"); } } private void myMulticast() { Event event = Event.createDataEvent("myevent1"); event.setField("key1", "推送分组成功...."); Dispatcher.getInstance().multicast(event); //向所有和myevent1名称匹配的事件推送 System.out.println(" 分组success!!!"); } private void myBroadcast() { Event event = Event.createDataEvent("myevent1"); //向所有的事件推送,不要求和这儿的myevent1名称匹配 event.setField("key1", "推送所有人成功...."); Dispatcher.getInstance().broadcast(event); System.out.println("所有人推送success!!!"); } }
7.重点注意事项!!
a.直接运行项目默认index.jsp,你会发现什么效果都没有。这个可能是你资源没用引用争取。强力推荐火狐!使用火狐,如果你前台代码出错,你查看页面源代码会有红色的标记。另外使用火狐F12或者直接右键选择查看元素,然后找到网络,点击网络,然后点击分析最后就出现一个界面,然后查看页面是否使用到js或者样式啥的。
8.应该还不行的!你还没有调用方法使用它。你可以选择手动调用,或者自己再代码里加。简单的就是在重新打开一个页面输入:localhost:8080/push/MyPushlet然后在index页面就会出现一个弹出框!当时自己不知道使用...也纠结了好久。以为直接运行就会有效果。就是你必须收到调用你配置的servlet方法,才会有效果。前面的入门,是代码里面作者自己定义,服务器启动就调用。
欢迎各种吐槽,新手第一次写。。。。后面会好好改进!!
相关文章推荐
- 使用Pushlet向指定用户推送消息
- 开源框架Pushlet入门,使用Pushlet将消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端
- 使用pushlet实现消息服务端推送至客户端
- signalr中Group 分组群发消息的简单使用
- 使用tomcat8.0.36实现的websocket技术,实现向单个以及全部用户实时推送消息的功能
- 广泛使用的一个对特定在线用户发送系统消息的程序
- 使用友盟消息推送中遇到的哪些问题--索引(开发者必读)
- 微信公众平台向特定用户推送消息
- 使用友盟消息推送中遇到的哪些问题--索引(开发者必读)
- 使用Pushlet将消息从服务器端推送到客户端
- java使用scanner接受用户输入遇到空格问题的解决
- 微信公众平台主动给用户推送消息,群发消息解决方案收集
- 微信公众平台向特定用户推送消息
- goEasy消息推送,pushlet 向特写用户实时推送
- Pushlet 推送数据库消息到前台指定用户
- 使用Pushlet将消息从服务器端推送到客户端
- 使用pushlet实现消息服务端推送至客户端
- 微信公众平台向特定用户推送消息
- Spring mvc + pushlet实现向特定用户实时推送信息