`

Pushlet的第一个实例-聊天室

阅读更多

笔者为了体验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的设计思想相对来说比较简单,有空大家可以看它的源代码,分析看看有没有更好的实现方法

 

 

 

分享到:
评论
4 楼 McQsad 2010-10-25  
麻烦问下,这个程序,我粘贴到网页中,那三个js文件我也放进去了,路径也改了,然后部署在tomcat上了,但是我用两台机器尝试,看是否能聊天,但是不好使,难道我哪里做错了吗?
3 楼 houzhaowei 2010-07-02  
tomyz0223 写道
OnData,是Pushlet封装好的回调,Pushlet在服务端做了封装,如果还不清楚,我抽空给你找到源码的地方。

谢谢   知道这个就行了  我先试试~
2 楼 tomyz0223 2010-07-01  
OnData,是Pushlet封装好的回调,Pushlet在服务端做了封装,如果还不清楚,我抽空给你找到源码的地方。
1 楼 houzhaowei 2010-07-01  
请问  onData(event)函数在哪儿调用的?????

相关推荐

    Pushlet的Ajax-pushlet-client.js分析

    在当今的Web开发中,实时通信技术已经成为了一项不可或缺的技能,而Pushlet的Ajax-pushlet-client.js则是实现服务器“推”技术的重要工具。本文将深入剖析这个JavaScript库的核心原理,帮助开发者理解其内部机制。 ...

    Pushlet学习(二) -- Pushlet CookBook部分翻译 + 注释

    Pushlet是Java中的一种推技术,它允许服务器主动向客户端推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术打破了传统的HTTP长轮询或短轮询机制,提供了实时性更好的通信方式。本篇内容主要围绕"Pushlet...

    PUSHLET即时通讯工程实例

    **PUSHLET即时通讯工程实例详解** PUSHLET是一种基于Java技术实现的即时通讯系统,它允许服务器主动向客户端推送数据,而无需客户端持续轮询请求。...这个实例对于学习Java Web开发和理解PUSH技术有很好的实践价值。

    PushLet实例,可直接运行

    这个实例"PushLet实例,可直接运行"提供了一个完整的、可以直接执行的PushLet项目,包括必要的jar包,使得开发者能够快速理解和应用PushLet技术。 在Web开发中,传统的HTTP协议是基于请求-响应模型的,这意味着...

    pushlet2.0.4-demo-增加指定人推送

    这个实例包含了源代码、配置文件和相关文档,可以帮助你快速搭建一个简单的示例应用,实际体验如何配置和调用这一新特性。 总结来说,Pushlet 2.0.4 的指定用户推送功能是其在实时消息领域的一大进步,它不仅提高了...

    java服务端推送实例-pushlet-及中文问题

    此外,文档可能还详细解释了如何运行和测试这个实例,以确保其正常工作。 通过学习和实践这个Java服务端推送实例,你可以掌握Pushlet框架的使用,理解服务端推送的基本原理,以及如何解决在推送过程中遇到的中文...

    pushlet 之 Pushlet使用手把手实例

    本篇将通过一个实例,深入讲解如何使用Pushlet。 一、Pushlet 概述 Pushlet 是由Caucho公司开发的,其核心思想是基于HTTP长连接的服务器推送,解决了传统HTTP协议中客户端必须发起请求才能获取数据的问题。Pushlet...

    pushlet-sessionid.jar ajax-pushlet-client.js pushlet.properties

    pushlet 所需夹包 和配置文件 ajax-pushlet-client.js pushlet-sessionid.jar sources.properties pushlet.properties

    pushlet实例以及jar

    在这个实例中,包含的jar文件很可能包含了Pushlet的核心组件和依赖库,如事件处理、网络通信等模块。开发者可以通过引入这些jar,快速地在自己的应用中集成Pushlet功能。 为了更好地理解和使用这个Pushlet实例,...

    使用Ext Pushlet 实现的点对点聊天功能最新

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    使用Ext Pushlet 实现的点对点聊天功能

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    pushlet实现简单的用户聊天

    "pushlet实现简单的用户聊天"是一个典型的用例,它展示了如何利用Pushlet框架来构建一个在线聊天系统。Pushlet框架主要包括两个核心组件:Pushlet Server和Pushlet Client。Pushlet Server运行在服务器端,接收并...

    pushlet例子

    总结来说,Pushlet是早期服务器推送技术的一个实例,它为Web实时通信提供了一个解决方案,但随着技术的发展,现在有更多的选择,如WebSocket和HTTP/2 Server Push,它们在性能和兼容性上都有所改进。

    学生课时设计pushlet 聊天实例

    这个标题暗示了这是一个教育项目,专注于使用Pushlet技术创建一个即时聊天应用,用于学生之间的交流。Pushlet是一种基于Java的实时通信技术,它允许服务器向客户端推送数据,而无需客户端持续发送请求,从而实现了...

    pushlet-UserUnicast

    "Pushlet-UserUnicast" 是一个专门针对特定用户进行推送技术演示的项目,它为初学者提供了深入了解和学习推送技术的良好平台。Pushlet是一种基于Java的实时数据推送框架,它允许服务器主动向客户端发送数据,而不是...

    Pushlet后台往jsp前台推送消息实例

    总的来说,Pushlet提供了一种简单的方式来实现在Web应用中从后台向前端推送消息,这对于实时聊天、股票更新、在线游戏等场景非常有用。通过理解Pushlet的工作原理和实践操作,开发者可以有效地提升Web应用的交互体验...

    pushlet服务器推技术例子

    通过上述机制,Pushlet服务器推技术实例能够实现高效的实时通信,尤其适用于需要实时交互的应用,如在线聊天室、实时股票报价等。在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例...

    pushlet实例(java服务端推送消息)

    此实例采用 pushlet2.0.4 官方最新 servlet+jsp 实现多个客户端连接到web服务器,由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以...

    pushlet的笔记

    【Pushlet笔记】是关于一个开源工具的详细学习记录,主要涵盖了Pushlet的源码解析、功能使用以及二次开发等内容。Pushlet是一个基于Java的实时推送框架,它允许服务器向客户端实时发送数据,而无需客户端频繁发起...

    pushlet

    在实际应用中,Pushlet技术可以用于实时股票更新、聊天室、在线游戏、协作工具等多种场景。开发者可以通过解压提供的pushlet-2.0.3压缩包,获取源代码、文档和示例,以便更好地理解和集成Pushlet到自己的项目中。 ...

Global site tag (gtag.js) - Google Analytics