`
风过无声
  • 浏览: 87988 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Pushlet-Web后台推送系统

 
阅读更多

1.简介

Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。表面上是服务器推,实现是还是客户端拉。

2.实现

2.1.发布Event

2.1.1.Local本地

--Dispatcher API

Dispatcher.getInstance().multicast()/unicast()/broadcast().

package com.siyuan.study.pushlet.event;

import java.io.IOException;

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;

public class SendEventServlet extends HttpServlet {

	private static final long serialVersionUID = 1341951769479495126L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Event event = Event.createDataEvent("/myEvent/test");
		event.setField("mess", "it is " + System.currentTimeMillis());
		Dispatcher.getInstance().broadcast(event);
		Dispatcher.getInstance().multicast(event);
		Dispatcher.getInstance().unicast(event, req.getParameter("sessionId"));
	}
	
}

--EventSource

2.1.2.Remote远程

2.2.获取Event

--DHTML

--AJAX

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
        <meta http-equiv="Pragma" content="no-cache" />  
        <script type="text/javascript" src="ajax-pushlet-client.js"></script>         
        <script type="text/javascript">  
            PL._init();   
            PL.joinListen('/cuige/he');
            function onData(event) {   
                alert(event.get("mess"));   
                // 离开  
                // PL.leave();  
            }  
        </script>  
    </head>  
    <body>  
        <center>  
        <h1>  
            my first pushlet!  
        </h1>  
        </center>  
    </body>  
</html>

--XML

--J2ME

3.其余配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE web-app  
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
    "http://java.sun.com/dtd/web-app_2_3.dtd">  
<!-- $Id: web.xml,v 1.7 2005/02/21 17:21:49 justb Exp $ -->  
<web-app>  
    <!-- Define the pushlet servlet -->  
    <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>sender</servlet-name>  
        <servlet-class>com.siyuan.study.pushlet.event.SendEventServlet</servlet-class>  
    </servlet>
    
    <!-- Define the Servlet Mappings. -->  
    <!-- The pushlet -->  
    <servlet-mapping>  
        <servlet-name>pushlet</servlet-name>  
        <url-pattern>/pushlet.srv</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>sender</servlet-name>  
        <url-pattern>/send</url-pattern>  
    </servlet-mapping> 
    
</web-app> 

pushlet.properties

4.设计思路

客户端订阅事件时在SessionManager中注册一个Session,并且保存订阅信息Subscriber。Subscriber包含两个重要的属性,subscriptions主题,EventQueue用于存储Event,客户端请求Pushlet从EventQueue中获取Event。

5.参考资料

http://www.pushlets.com/

  • 大小: 5.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics