Php聊天应用问题

时间:2012-12-02 06:08:12

标签: php mysql chat

我是 php / mysql的新手,决定实施一个简单的聊天应用程序。以下是一些具体问题..


1) 在Facebook中,如果我发送聊天消息,它会使用javascript更新聊天记录,但它也会出现一个"无法发送"如果连接丢失,请在一段时间后标记。我的问题是如何在使用AJAX / jquery发送消息之前检查是否建立了与服务器的连接,这样我也可以通知用户他的消息没有被传递。


2)考虑这个简化的场景..聊天室有2个插槽,也就是说,只有2个人可以随时共享聊天室并互相聊天。如果第三个用户尝试登录,他将会被告知聊天室已满。我可以将用户的登录数据存储为会话变量或类似的东西。我的问题是这个...如果2个人已经在聊天,一个人只是关闭浏览器而没有注销或类似的东西......在这种情况下,会话变量仍然存在,应用程序仍然认为2个人正在聊天房间..如果用户在浏览器窗口中没有活动,如何删除会话变量,并为第3个人进入空间?


3)聊天应用程序(如fb聊天和谷歌聊天)如何更新聊天记录?他们是否要求整个聊天记录(例如由10条消息组成)或他们只是使用AJAX请求当前消息?每个请求的理想持续时间是多少?我正在使用1秒......

2 个答案:

答案 0 :(得分:1)

我认为大多数聊天应用程序都没有使用ajax。 ajax的问题​​是服务器没有直接向客户端发送消息的机制。如果您使用了ajax,则每个客户端都必须以定时间隔检查服务器。

此问题的解决方案是websockets或长轮询。查看ratchet它是php的websockets。


如果你坚持使用ajax,你可以:

  1. 将提交的类附加到div,消息存储在class='ephemeral'上。如果ajax只是失败$('.ephemeral').append('failed')
  2. 如果客户端在客户端断开连接的最后5秒内没有ping通服务器,可以通过不断地使用ajax调用ping服务器来解决这个问题。
  3. 您可以向服务器发送您收到的最新聊天消息的时间,并在此之后从数据库中仅拉出聊天。这需要将每个聊天保存为数据库中的单独行。

答案 1 :(得分:1)

1)在jquery中,ajax回调函数会告诉你是否出现错误:

$("#form").submit(function(){
    $.post("post.php", {
        message: $('#field').val(),
    }, function(data, status){
        alert("success");
    }).error(function(){
        alert(error);
    });
});

请参阅http://api.jquery.com/jQuery.post/

2)您可以定期轮询(如每分钟)服务器,如果用户不联系服务器,则在onunload被触发时销毁其会话或向服务器发送disconnect命令(不太可靠)。

3)我会向服务器发送最后一张图片的时间戳或ID,然后它会将所有消息发回给我。

这取决于您希望聊天的“实时”。 1秒到10秒是理想的。