如何在JSP聊天应用程序中使用Comet

时间:2012-08-10 03:00:14

标签: jquery ajax comet

我使用Netbeans使用Java EE创建聊天Web应用程序,我使用jquery函数连接到Servlet,连接到数据库以获取一些信息,例如我设法用在线用户列表更新DIV ,每5秒钟。

 setInterval(function(){ 
    $.get('MyServlet', {
            roomId: roomToJoin
        }, function (responseText) { 

    //Some codes Here
    //responseText is returned as a chain of user names
    //they get separated using JavaScript codes and then appended in a div

    });  //Update the list of Online users each 5 secondes

    },5000);

但是使用相同的技术来更新用户写的消息有点困难,但是可能,但我在搜索过程中发现的一种更智能的技术是Comet技术,或者反向ajax,或者长poling,而且是唯一的我找到的例子是Counter的例子,它遍布整个网络,我真的不明白,甚至不符合我的要求,我不知道这是什么好方法,我不知道是否有消息应该存储在数据库中并再次获取,我真的不知道使用Comet的代码,希望你能帮助我们,因为这是Chat应用程序的核心,其余的很容易。

1 个答案:

答案 0 :(得分:0)

构建基于Web的实时聊天室并非易事。特别是很难处理Ajax / Comet技术问题。您可以使用消息推送云服务,例如EZComet(我是创始人),PusherPubnub。您可以参考一个非常简单的聊天室示例here

要在javascript客户端上接收消息,可以像这样调用JS API。当收到新消息时,将调用您的回调函数,您可以在那里做相应的反应,如显示消息,更新用户列表

ez_comet.subscribe({
    user_name: 'demo', 
    channel: 'chatroom', 
    callback: callback,
    auto_tick: false,
    msg_type: 'json'
});

要提交聊天室消息,您可以通过API将消息推送到频道。 PHP中的示例

<?php

// Include ezcomet PHP SDK, it can be found here 
// https://ezcomet.com/tools/php_sdk
include 'ezcomet.php';

$username = $_POST['username'];
$message = $_POST['message'];
$msg = array(
    'username' => $username,
    'message' => $message
);

$tick = push_msg('your api key', 'demo', 'chatroom', @json_encode($msg));
echo "tick: $tick";

?>