我使用彗星技术实现了聊天系统。这是链接(请参阅第二种方法,使用ajax)comet with ajax
当我使用一个帐户发送消息时,我使用2个浏览器和2个帐户,另一个接收者使用自己的名称接收它。 这是代码:
handleResponse: function(response)
{
$('chat_id_box').innerHTML += '<u class="myId">' + response['name'] + '</u>: <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位用户。代码中有什么问题?我无法理解。 感谢..
答案 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>: <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)));