COMET与经典的AJAX聊天

时间:2013-03-01 11:46:01

标签: php jquery chat comet

我使用彗星技术实现了聊天系统。这是链接(请参阅第二种方法,使用ajax)comet with ajax

当我使用一个帐户发送消息时,我使用2个浏览器和2个帐户,另一个接收者使用自己的名称接收它。 这是代码:

handleResponse: function(response)
{

 $('chat_id_box').innerHTML += '<u class="myId">' + response['name'] + '</u>:&nbsp;&nbsp;<p class="talk">' + response['msg'] + '</p></br>';

},

这里是控制器

$filename  = dirname(__FILE__).'./data.txt';
    $name   =   $this->session->userdata('name');
 // store new message in the file
  $msg = isset($_GET['msg']) ? $_GET['msg'] : '';
  if ($msg != '')
   {
  file_put_contents($filename,$msg.$name);
   die();
   }


  // infinite loop until the data file is not modified
   $lastmodif    = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
  $currentmodif = filemtime($filename);
     while ($currentmodif <= $lastmodif) // check if the data file has been modified
   {
    usleep(10000); // sleep 10ms to unload the CPU
   clearstatcache();
   $currentmodif = filemtime($filename);
  }

   // return a json array
   $response = array();
   $response['msg']       = file_get_contents($filename);
  $response['name']         =   file_get_contents($filename);
  $response['timestamp'] = $currentmodif;
    echo json_encode($response);
  flush();

假如我输入 xyz:helo world!然后在第二个浏览器中我收到此消息为 abc:helo world! abc 和< strong> xyz 是2位用户。代码中有什么问题?我无法理解。 感谢..

2 个答案:

答案 0 :(得分:2)

你应该用这个希望工作

     file_put_contents($filename, implode(';', array($msg, $name)));
     $response = explode(';', file_get_contents($filename));
     $response[0] is your msg and $response[1] is your name.

感谢 nostrzak

答案 1 :(得分:1)

您使用当前用户的会话数据作为名称,但发件人实际上不是当前用户。也许您可以将用户名和消息一起发送到服务器?

handleResponse: function(response)
{
    $('chat_id_box').innerHTML += '<u class="myId">'+response.user+'</u>:&nbsp;&nbsp;<p class="talk">'+response.msg+'</p></br>';
}

更新

虽然这有点晚,但您可以将数据编码为JSON。然后,当您使用它时,您可以解码它。

<?php
$response = json_decode(file_get_contents($filename));
$response->timestamp = $currentmodif;
echo json_encode($response);
flush();

当您将消息写入文件时,您可以使用:

<?php
file_put_contents($filename,json_encode(array('msg'=>$msg,'name'=>$name)));