`

Pushlet工作流程分析

阅读更多
Pushlet工作流程分析时采用从前台页面请求到后台程序响应,后台程序执行流程,最后前台对响应请求。分析对象是ajax-pushlet-client客户端。分析工具借助了firebug。

1)页面加载时,调用PL._addEvent(window, 'load', PL._init, false),其本质是调用了window.onload=PL._init(),即获取XMLHttpRequest对象,设定pushlet的请求URL为pushlet.srv,将状态置为STATE_READY。
2)通过某种方式调用了joinListen(aSubject),加入、监听、并订阅(subscribe),这里的aSubject和subscrible是“/pushlet/ping”,构造好query,然后调用PL._doRequest('join-listen', query),这时的query是值为“p_format=xml-strict&p_mode=pull&p_subject=/pushlet/ping”。参数含义:
p_format:响应格式,这里指严格的xml;
p_mode:pushlet模式;
p_subject:请求主题。
3)是否等待状态准备好(waitForState)为false,即可以直接进行请求,其原因是在初始化时已将状态设置为STATE_READY了,向服务器端发出请求,利用GET请求,URL为“../../pushlet.srv?p_event=join-listen&p_format=xml-strict&p_mode=pull&p_subject=/pushlet/ping”。参数补充说明:p_event,即请求事件类型,这里为“join-listen”;而pushlet.srv是pushlet servlet配置地址,在web.xml中指明。
4)第一次以GET方式请求:
GET 方式请求:
eventType=join-listen
p_subject=/pushlet/ping
p_format=xml-strict
p_mode=pull
p_event=join-listen

创建一个Session 设置userAgent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
创建一个Command实例:包括一个Session,事件Event,HTTP Servlet请求,HTTP Servlet响应
处理来自客户端的servlet请求
不同事件决定不同的操作
先请求加入
加入操作
Pushlet[INFO] SessionManager: Sun Jun 14 20:48:55 CST 2009 sapeledowe at 127.0.0.1 added
取得返回格式,默认值为js
实际值为xml-strict
新建响应事件,类型为join-ack
响应事件P_ID=sapeledowe
响应事件P_FORMAT=xml-strict
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Controller] joined
如果返回事件不是nack,再请求监听
请求监听操作
获取一个订阅者,设置主题=/pushlet/ping 标签=null
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Subscriber] Subscription added subject=/pushlet/ping sid=vusos label=null
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Controller] Listening mode=pull userAgent=mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9.0.10) gecko/2009042316 firefox/3.0.10
如果监听返回事件不是nack,则设置响应事件类型为join-listen-ack
响应事件类型为listen 或者 refresh
获得订阅者
从队列中获取事件,并推送至客户端
设置响应URL=/blchat/pushlet.srv?p_id=sapeledowe&p_event=refresh
发送 刷新事件 到客户端
设置响应事件的属性
通过客户端适配器推送给客户端

响应事件:
p_event=join-listen-ack
p_mode=pull
p_time=1244995572
p_id=sebocegebi
p_format=xml-strict
p_sid=nehon


p_event=refresh
p_time=1244995572
p_wait=5888
p_url=/blchat/pushlet.srv?p_id=sebocegebi&p_event=refresh



第二次请求:
GET 方式 eventType=refresh
p_id=sapeledowe
p_event=refresh
创建一个Command实例:包括一个Session,事件Event,HTTP Servlet请求,HTTP Servlet响应
处理来自客户端的servlet请求
不同事件决定不同的操作
响应事件类型为listen 或者 refresh
获得订阅者
从队列中获取事件,并推送至客户端
设置响应URL=/blchat/pushlet.srv?p_id=sapeledowe&p_event=refresh
发送 刷新事件 到客户端
设置响应事件的属性
通过客户端适配器推送给客户端

结论:
1、第一次请求后建立一个服务器端长久的session,同时创建一个对应的subscribe一个controller,并将他们与session关联。
2、系统中Event是怎么产生的:系统中产生的EVENT是来源于系统自带的几个产生线程。TestEventPullSources中有几个静态内部内,它们在系统初始化的时候就自动创建了。系统通过Dispatcher类将事件分发到各个Session工厂中各个Session中,分别加入到各自的Subscribe的EventQueue中去。
3、servlet取得reflesh操作请求后重新读取队列中的事件,然后将其转换为XML输出到前台,最后再输出一个“reflesh”事件。响应事件对应了JavaScript里相应的对象。“reflesh”事件导致再次请求服务器,不过这一次不再创建session,而是根据sessionId直接取得服务器端实例,然后再获取事件队列中的事件,如此循环。
5、退出时,停止session,移去所有的subscriptions,设置响应事件为“E_LEAVE_ACK”,并将其作为控制类事件发送到客户端。

    后面将对Pushlet源代码中的设计模式和二次开发过程进行分析。
分享到:
评论

相关推荐

    22_PHP_基于KPI的医疗废弃物管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    Python教程-快速入门基础必看课程09-文件处理

    该视频主要讲述了Python中文件的读写操作和pandas库中的subt函数来处理CSV文件。 在Python中,文件的读写操作需要使用open函数打开文件,并指定路径和模式。读取文件时,可以使用f.read()方法读取内容,并使用f.close()方法关闭文件。写入文件时,可以使用f.write()方法写入内容,并使用f.close()方法关闭文件。视频还介绍了如何在文件中进行换行操作,以及如何将文件中的内容进行读取和写入。 此外,视频还强调了在进行文件操作时需要注意的一些细节和技巧,例如文件的编码格式、内存不足问题、文件的访问权限、写入速度变慢问题等。视频还介绍了如何使用with语句来自动关闭文件,以及如何使用os模块中的函数来处理文件和文件夹。 另外,视频还讲述了如何使用pandas库中的subt函数来处理CSV文件。通过使用read函数将CSV文件读入,然后使用subt函数按照行和列进行划分。在划分时,可以根据需要选择不同的分隔符,如逗号、制表符等。通过subt函数可以将CSV文件切分成多个元素,然后将这些元素存储在一个list中。视频还展示了如何将这个list进行组合,

    《2023年度TikTok电商行业趋势白皮书》.zip

    《2023年度TikTok电商行业趋势白皮书》.zip

    网络攻防课程seed-labs实验-DNS_Attacks.zip

    网络攻防课程seed-labs实验-DNS_Attacks.zip

    sql查询数据库表结构(sql server适用)

    1. sql 语句查询sql server 数据库表结构 2. sql 语句查询sql server 数据库临时表结构 3. 可自由扩展字段,主要提供一个查询思路 4. 包括表名,列名,字段类型、主键表示、字段说明等。

    ASP.NETC#实验室预约管理系统.zip

    ASP.NET实验室预约管理系统源码 该系统的系统角色有三个:学生、教师、管理员,系统功能介绍如下: 学生功能 学生主要是四个功能。注册功能、查询功能、预约功能、学生资料管理功能。 (1)注册功能。学生进入登录界面后,如果没有注册,要先注册。注册的用户名是学生的学号。注册后才可以登录,学生在此功能里还能够修改、删除个人资料。 (2)查询功能。学生在进入主界面后,能够对想预约的课程查询或教师查询。由于老师可能教多个课程,所以有个二级选择目录。 (3)预约功能。当学生查询好信息后,就要对想要预约的实验开始预约。 (4)学生资料管理功能。学生在注册后,可以通过登录,修改自己的个人信息。 教师功能 教师也有四个功能。注册功能、查询功能、预约功能,教师的资料管理功能。只是教师和学生所使用功能的方式不一样。 (1)注册功能。老师进入登录界面后,如果没有账号,也要先注册账号,同时可以对自己的资料进行修改、删除、填加。 (2)查询功能。教师的查询功能主要是对实验室类别、项目、预约情况的查询。类别查询主要是查询实验室房间的信息;项目查询主要是查看能实验该项目的房间信息;预约查询主要是对实验室预约状况的查

    html实现儿童节庆祝项目源码

    java结合html实现儿童节庆祝代码

    操作系统课程实现Shell.zip

    操作系统课程实现Shell.zip

    一带一路下的交通发展(16组).pptx

    一带一路下的交通发展(16组).pptx

    光伏特性曲线(光照强度/温度)构建U-P以及U-I曲线

    通过MATLAB/simulink模块,构建光伏特性曲线(光照强度/温度)构建U-P以及U-I曲线,可以通过simulink模型设置光伏发电板串并联数量、光伏参数(开路电压,开路电流、最大功率点电压、最大功率点电流以及最大功率)、温度系数等,可以得到完美的U-P以及U-I曲线,通过m文件能够修改坐标轴的x轴及y轴坐标的范围。 模型使用方法,首先在MATLAB中添加文件路径,然后在MATLAB工作区中打开m文件以及slx文件,然后在MATLAB中直接运行m文件,然后回弹出相应的U-P以及U-I曲线,通过m文件能够修改光照强度的变化范围、温度的变化范围,总共可以得到光照强度以及温度共四个U-P以及U-I曲线图。

    Python爬取百度贴吧数据.zip

    python爬虫案例

    43_超市管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    农业农村部特聘审计员推荐表.doc

    农业农村部特聘审计员推荐表.doc

    132_基于Java的动物拯救游戏-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    农垦农产品质量追溯系统建设项目验收申请书目录.doc

    农垦农产品质量追溯系统建设项目验收申请书目录.doc

    8_Android app作业-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    本人本科毕业论文创建的算例

    本人本科毕业论文创建的算例

    苹果刷机完整教程【中英双语对照】_20231121153540.zip

    苹果刷机完整教程【中英双语对照】_20231121153540.zip

    删除顺序表中指定值的所有元素.md

    删除顺序表中指定值的所有元素

Global site tag (gtag.js) - Google Analytics