0

我已经使用彗星技术实现了一个聊天系统。这是链接(参见 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! abcxyz是 2 个用户。代码中的问题是什么?我无法理解。谢谢..

4

2 回答 2

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

于 2013-03-01T14:58:42.163 回答
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)));
于 2013-03-01T12:04:16.390 回答