首页 > 其他 > 详细

DWR长连接

时间:2014-03-28 23:53:35      阅读:669      评论:0      收藏:0      [点我收藏+]

web.xml

bubuko.com,布布扣
  <servlet>
        <servlet-name>dwr-invoke</servlet-name>
        <servlet-class> uk.ltd.getahead.dwr.DWRServlet </servlet-class>
        <init-param> 
           <param-name> debug </param-name>
           <param-value> true </param-value>
        </init-param>
        <init-param> <!-- 这个是DWR2.0必须的,不然会报java.lang.IllegalArgumentException -->
           <param-name> classes </param-name>
           <param-value> java.lang.Object </param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>dwr-invoke</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
bubuko.com,布布扣

在Web-INF下创建dwr.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
<dwr>
    <allow>
        <convert match="com.relonger.ccljent.entity.Message" converter="bean">  <!--javaBean-->
            <param name="include" value="msg,time" />
        </convert>
        <create creator="spring" javascript="ChatService">
            <param name="beanName" value="chatService" />
        </create>
    </allow>
</dwr>

  ChatService  服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ChatService implements ApplicationContextAware {
    private ApplicationContext ctx;
    @Override
    public void setApplicationContext(ApplicationContext ctx)
            throws BeansException {
        this.ctx = ctx;
    }
    /**
     * <b>function:</b> 向服务器发送信息,服务器端监听ChatMessageEvent事件,当有事件触发就向所有客户端发送信息
     * * @author hoojo
     * * @createDate 2011-6-8 下午12:37:24
     * * @param msg
     * */
    public void sendMessage(Message msg) {
        //发布事件
        ctx.publishEvent(new ChatMessageEvent(msg));
    }<br>}

  ChatMessageClient  客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class ChatMessageClient implements ApplicationListener,
        ServletConfigAware {
    private ServletContext ctx;
    public ServletContext getCtx() {
        return ctx;
    }
    public void setCtx(ServletContext ctx) {
        this.ctx = ctx;
    }
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //如果事件类型是ChatMessageEvent就执行下面操作
        if (event instanceof ChatMessageEvent) {
            Message msg = (Message) event.getSource();
            ServerContext context = ServerContextFactory.get();
            //获得客户端所有chat页面script session连接数
            if(ctx != null){
                System.out.print("==========");
            }
             WebContext contex = WebContextFactory.get(); 
             if(contex != null){
                 System.out.print("====>>>>>>>");
             }
              
            Collection<ScriptSession> sessions = context.getScriptSessionsByPage("/DWR/chat.jsp");
//          Collection<ScriptSession> sessions = context.getScriptSessionsByPage(ctx.getContextPath() + "/chat.jsp");
            for (ScriptSession session : sessions) {
                ScriptBuffer sb = new ScriptBuffer();
                Date time = msg.getTime();
                String s = time.getYear() + "-" + (time.getMonth() + 1) + "-" +  time.getDate() + " "
                +  time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
                //执行setMessage方法
                sb.appendScript("showMessage({msg: ‘")
                .appendScript(msg.getMsg()).appendScript("‘, time: ‘")
                .appendScript(s)
                .appendScript("‘})");
                System.out.println(sb.toString());
                //执行客户端script session方法,相当于浏览器执行JavaScript代码
                //上面就会执行客户端浏览器中的showMessage方法,并且传递一个对象过去
                session.addScript(sb);
                }
            
    }
    @Override
    public void setServletConfig(ServletConfig arg0) {
        // TODO Auto-generated method stub
 
    }<br>}

  

DWR长连接,布布扣,bubuko.com

DWR长连接

原文:http://www.cnblogs.com/fengyu9/p/3630551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!