本文转载自: https://www.cnblogs.com/linjiqin/archive/2011/12/30/2307788.html 作者:linjiqin 转载请注明该声明。

一、comet基本概念
1.comet是一个用于描述客户端和服务器之间交互的术语,即使用长期保持的http连接来在连接保持畅通的情况下支持客户端和服务器间的事件驱动的通信。
2.传统的web系统的工作流程是客户端发出请求,服务器端进行响应,而comet则是在现有技术的基础上,实现服务器数据、事件等快速push到客户端,所以会出现一个术语”服务器推“技术。

二、push实现方式
1.原理:
利用jsp/servel技术,在不关闭http流的情况下push数据到客户端浏览器;
2.实现:
基于ajax的长轮询(long-polling)方式

ajax的出现使得javascript可以调用xmlhttprequest对象发出http请求,javascript响应处理函数根据服务器返回的信息对html页面的显示进行更新。使用ajax实现“服务器推”与传统的ajax应用不同之处在于:

1)、服务器端会阻塞请求直到有数据传递或超时才返回。
2)、客户端 javascript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
3)、当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重 新建立连接,客户端会一次把当前服务器端所有的信息取回。

Pushlet实例

一、首先建立一个web工程pushlet,将pushlet.jar放到lib目录中,引入到工程。并且将pushlet.properties和sources.properties两个文件拷贝到WEB-INF目录中去。工程的目录结构如图示

我们一般只需要对sources.properties进行修改即可,创建的消息源必须在这个文件中进行配置。消息源需要实现EventSource接口

二、配置web.xml文件

<?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"><!--    注意,缺省不需要修改<url-pattern>/pushlet.srv</url-pattern>,如果修改,    需要在对应的js文件中也要修改。pushlt缺省就是通过pushlet.srv触发servlet的。--><servlet><servlet-name>pushlet</servlet-name><servlet-class>            nl.justobjects.pushlet.servlet.Pushlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>pushlet</servlet-name><url-pattern>/pushlet.srv</url-pattern></servlet-mapping>

<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

三、看一下index.jsp这个文件的内容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>">

<title>HelloWorld</title>

<meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><script type="text/javascript" src="ajax-pushlet-client.js"></script><script type="text/javascript">         //对pushlet的初始化,触发web.xml中的servlet。        PL._init();         //这里的监听的主题,必须在sources.properties中配置的对象中声明这个主题。        //sources.properties配置着事件源(EventSources),在服务器启动时会自动激活。        //可以通过服务器的启动记录查看得到。可以将这个文件放到WEB-INF目录下面或者classess目录下面都可以。        PL.joinListen('/linjiqin/hw');         function onData(event) {             alert(event.get("hw"));         } </script></head>

<body></body></html>

四、修改sources.properties文件

source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSourcesource2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSourcesource3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSourcesource4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSourcesource5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSourcesource6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource#source1~source6是系统缺省自带的,source7是我自己配置的,并且在index.jsp中的脚本中,#配置的/linjiqin/hw是和这儿是对应的。具体是这样的。HwPlushlet是com.ljq.test.HelloWorldPlushlet对象的一个内部类,#并且继承EventPullSource接口。source7=com.ljq.test.HelloWorldPlushlet

五、核心代码HelloWorldPlushlet

package com.ljq.test;

import java.io.Serializable;

import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.EventPullSource;

@SuppressWarnings("serial")public class HelloWorldPlushlet extends EventPullSource implements Serializable {

/**     * 设置休眠时间*/    @Overrideprotected long getSleepTime() {return 1000;    }

/**     * 创建事件     *      * 业务部分写在pullEvent()方法中,这个方法会被定时调用。*/    @Overrideprotected Event pullEvent() {        Event event = Event.createDataEvent("/linjiqin/hw");        event.setField("hw", "HelloWorld!!!!");return event;    }

}

这样这个基本的例子就OK了,运行一下,看看吧。
访问http://localhost:8083/pushletprj 会定时弹出alert窗口,窗口的内容如下图:

如果这个页面关闭了,服务器会自动取消订阅,和移除对应的session信息。下面是我关闭页面后,服务器端的输出信息,如图:

开源框架Pushlet入门相关推荐

  1. 【完结】给新手的12大深度学习开源框架快速入门项目

    文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...

  2. 【github干货】主流深度学习开源框架从入门到熟练

    文章首发于微信公众号<有三AI> [github干货]主流深度学习开源框架从入门到熟练 今天送上有三AI学院第一个github项目 01项目背景 目前深度学习框架呈百家争鸣之态势,光是为人 ...

  3. 分布式计算开源框架Hadoop入门实践

    在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章<Tiger Concurrent Practice --日志分析并行分解设计与实 ...

  4. 安卓学习笔记44:开源框架okhttp3入门

    文章目录 零.学习目标 一.okhttp3框架概述 二.案例演示 - 利用okhttp3下载网页 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[DownloadWebPageBy ...

  5. 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  6. 【杂谈】超过12个,150页深度学习开源框架指导手册与GitHub项目,初学CV你值得拥有...

    之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息. 开源框架背景 现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caf ...

  7. 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

    之前我们公众号输出了很多深度学习开源框架相关的内容,现在整理成技术手册给大家分享以方便阅读,下面是详细信息. 开源框架背景 现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caf ...

  8. 【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

    之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息. 开源框架背景 现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caf ...

  9. darknet框架_【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

    之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息. 开源框架背景 现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caf ...

最新文章

  1. php析构函数的用法
  2. 域名CNAME 概念
  3. swift Swauth install
  4. ORz.....-0-
  5. 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )
  6. 基于财通证券的数字化建设,总结的金融行业数字化转型方向
  7. 第七个猴子java_黑猴子的家:Java SE 练习题第七章
  8. 【Lucene4.8教程之三】搜索
  9. vue中安装sass
  10. Web前端3.0时代,“程序猿”如何“渡劫升仙”
  11. Unity运行时刻资源管理
  12. 15 张图,了解一下 TCP/IP 必知也必会的 10 个问题
  13. python怎么打印路径,python 打印路径的几种结果
  14. arduino并口屏_74HC595等串口转并口芯片的Arduino实用封装
  15. VSCode 中使用GO语言
  16. 主流流媒体服务器介绍
  17. 《Dynamically Fused Graph Network for Multi-hop Reasoning》 论文笔记
  18. win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
  19. Java保留两位小数的方法
  20. 深度学习——NLP中词的表示方法word embeddingword2vec

热门文章

  1. c语言getasynckeystate,GetAsyncKeyState用法
  2. 天天在公司刷招聘网站,我被老板发现了
  3. 上班被迫假笑使情绪低落
  4. 智能会议系统(26)---一款Android VoIP网络电话App架构分析
  5. 【考研初试】基础问题汇总 学硕or专硕? 数一数二差别在哪?怎么择校?
  6. STM32实战总结:HAL之看门狗
  7. java基于SpringBoot+Vue+nodejs的演唱会话剧娱乐项目售票系统 element
  8. 车辆数字钥匙ICCE标准和CCC标准的简单分析和比较
  9. python新手入门笔记_2020最新Python入门笔记
  10. 程序员32岁前跳槽大多数看薪资,那里福利好去那里,32岁后请慎重