笔者为了体验Pushlet的原理,做了一个聊天室程序,聊天功能对于每个user来说有两个基本功能:
1.发布聊天记录
对于Pushlet来说,是把这个聊天记录clone放到每个subscriber对应的EventQueue中
使用Pushlet提供的publish函数,来完成功能
2.接收别人新的聊天记录
线程轮询EventQueue,取出数据update browser客户端,它可以使用subscribe函数,也可以使用join_listen函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Pushlet Chat - Enter</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="chat.css" rel="stylesheet">
<script type="text/javascript"src="../../lib/js-pushlet-client.js"></script>
</head>
<body>
<div id="login" align="center">
<h3>Enter Chat room</h3>
<p>
Nickname: <input type="text" id="nick" name="nick" value="" />
</p>
<p>
<input type="button" id="enter" name="enterButton" value="Join chat room " onClick="joinChatRoom();"/>
</p>
</div>
<div id="content1" align="center" style="display:none">
<div id="content" align="center" style="display:none;border-top-style:Ridge;border-right-style:Ridge;border-left-style:Ridge;
border-bottom-style:Ridge;border-width: 7pt; background-color:#8B008B">
</div>
<div>
<input type="text" id="messageBox"/>
<input type="button" id="messageButton" value="Send" onClick="sendMessage();"/>
</div>
</div>
<script type="text/javascript" src="../../assets/util.js"></script>
<script type="text/javascript" src="../../assets/api.js"></script>
<script type="text/javascript">
function joinChatRoom(){
initDHTML();
var nick = document.getElementById("nick").value;
enterChat(nick);
}
function enterChat(nick){
p_join_listen('/chatroom');
p_publish('/chatroom', 'action', 'enter', 'nick', nick);
document.getElementById("login").style.display="none";
document.getElementById("content1").style.display="block";
document.getElementById("content").style.display="block";
}
// Event Callback: display all events
function onData(event) {
p_debug(false, "pushlet-app", 'event received event=' + event.getEvent() );
var action = event.get('action');
var content = 'none action=' + action;
//alert(action);
if (action == 'send') {
content = '<b>' + event.get('nick') + '</b>: <i>' + event.get('msg') + '</i>';
} else if (action == 'enter') {
content = '<b><i>*** ' + event.get('nick') + ' joined chat ***</i></b>';
} else if (action == 'exit') {
content = '<b><i>*** ' + event.get('nick') + ' left chat ***</i></b>';
}
appendMessage(content);
}
function appendMessage(content){
var div = document.createElement("DIV");
document.getElementById("content").appendChild(div);
div.innerHTML = content;
}
function sendMessage(){
p_publish('/chatroom', 'action', 'send', 'nick', document.getElementById("nick").value, 'msg', document.getElementById("messageBox").value);
}
</script>
<script type="text/javascript">p_embed()</script>
</body>
</html>
注意:需要特别指出的是,每个Join到server的user,会对应一个消费线程,而发布消息的线程只有一个,因此对于普通的web JSP
container来说,如果有400个user在聊天室,那么server对应有400个线程在轮询EventQueue,并且会发送心跳包来保证Keep-live没有timeout,开销会非常大,有没有更好的设
计来避免线程的开销呢?希望大家一起思考。
Pushlet的设计思想相对来说比较简单,有空大家可以看它的源代码,分析看看有没有更好的实现方法
分享到:
相关推荐
在当今的Web开发中,实时通信技术已经成为了一项不可或缺的技能,而Pushlet的Ajax-pushlet-client.js则是实现服务器“推”技术的重要工具。本文将深入剖析这个JavaScript库的核心原理,帮助开发者理解其内部机制。 ...
Pushlet是Java中的一种推技术,它允许服务器主动向客户端推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术打破了传统的HTTP长轮询或短轮询机制,提供了实时性更好的通信方式。本篇内容主要围绕"Pushlet...
**PUSHLET即时通讯工程实例详解** PUSHLET是一种基于Java技术实现的即时通讯系统,它允许服务器主动向客户端推送数据,而无需客户端持续轮询请求。...这个实例对于学习Java Web开发和理解PUSH技术有很好的实践价值。
这个实例"PushLet实例,可直接运行"提供了一个完整的、可以直接执行的PushLet项目,包括必要的jar包,使得开发者能够快速理解和应用PushLet技术。 在Web开发中,传统的HTTP协议是基于请求-响应模型的,这意味着...
这个实例包含了源代码、配置文件和相关文档,可以帮助你快速搭建一个简单的示例应用,实际体验如何配置和调用这一新特性。 总结来说,Pushlet 2.0.4 的指定用户推送功能是其在实时消息领域的一大进步,它不仅提高了...
此外,文档可能还详细解释了如何运行和测试这个实例,以确保其正常工作。 通过学习和实践这个Java服务端推送实例,你可以掌握Pushlet框架的使用,理解服务端推送的基本原理,以及如何解决在推送过程中遇到的中文...
本篇将通过一个实例,深入讲解如何使用Pushlet。 一、Pushlet 概述 Pushlet 是由Caucho公司开发的,其核心思想是基于HTTP长连接的服务器推送,解决了传统HTTP协议中客户端必须发起请求才能获取数据的问题。Pushlet...
pushlet 所需夹包 和配置文件 ajax-pushlet-client.js pushlet-sessionid.jar sources.properties pushlet.properties
在这个实例中,包含的jar文件很可能包含了Pushlet的核心组件和依赖库,如事件处理、网络通信等模块。开发者可以通过引入这些jar,快速地在自己的应用中集成Pushlet功能。 为了更好地理解和使用这个Pushlet实例,...
实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...
实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...
"pushlet实现简单的用户聊天"是一个典型的用例,它展示了如何利用Pushlet框架来构建一个在线聊天系统。Pushlet框架主要包括两个核心组件:Pushlet Server和Pushlet Client。Pushlet Server运行在服务器端,接收并...
总结来说,Pushlet是早期服务器推送技术的一个实例,它为Web实时通信提供了一个解决方案,但随着技术的发展,现在有更多的选择,如WebSocket和HTTP/2 Server Push,它们在性能和兼容性上都有所改进。
这个标题暗示了这是一个教育项目,专注于使用Pushlet技术创建一个即时聊天应用,用于学生之间的交流。Pushlet是一种基于Java的实时通信技术,它允许服务器向客户端推送数据,而无需客户端持续发送请求,从而实现了...
"Pushlet-UserUnicast" 是一个专门针对特定用户进行推送技术演示的项目,它为初学者提供了深入了解和学习推送技术的良好平台。Pushlet是一种基于Java的实时数据推送框架,它允许服务器主动向客户端发送数据,而不是...
总的来说,Pushlet提供了一种简单的方式来实现在Web应用中从后台向前端推送消息,这对于实时聊天、股票更新、在线游戏等场景非常有用。通过理解Pushlet的工作原理和实践操作,开发者可以有效地提升Web应用的交互体验...
通过上述机制,Pushlet服务器推技术实例能够实现高效的实时通信,尤其适用于需要实时交互的应用,如在线聊天室、实时股票报价等。在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例...
此实例采用 pushlet2.0.4 官方最新 servlet+jsp 实现多个客户端连接到web服务器,由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以...
【Pushlet笔记】是关于一个开源工具的详细学习记录,主要涵盖了Pushlet的源码解析、功能使用以及二次开发等内容。Pushlet是一个基于Java的实时推送框架,它允许服务器向客户端实时发送数据,而无需客户端频繁发起...
在实际应用中,Pushlet技术可以用于实时股票更新、聊天室、在线游戏、协作工具等多种场景。开发者可以通过解压提供的pushlet-2.0.3压缩包,获取源代码、文档和示例,以便更好地理解和集成Pushlet到自己的项目中。 ...