【问题标题】:PHP AJAX - Chat functionalityPHP AJAX - 聊天功能
【发布时间】:2016-04-16 06:18:02
【问题描述】:

我正在使用 PHP、JavaScript/jQuery 和 MySQL 构建一个 Web 应用程序。现在我正在尝试实现一个聊天功能,允许两个在线的用户互相聊天(例如,不是一个大聊天室,但只有两个用户之间的私人聊天)。但是,我在实施过程中遇到了以下问题:

  1. 如何让一个用户知道另一个用户当前是否在线?现在我有一个页面,用户可以在其中看到其他注册用户的名称。我希望区分当前已登录的用户和未登录的用户。目前,当用户登录时,我将他的用户名存储在$_SESSION['name'] 中。那么一个用户如何知道另一个用户的$_SESSION['name']是否也被设置了呢?

  2. 如何确保对话对两个用户是私密的?我目前有一个名为"chat.php"的页面,聊天界面所在的位置。当一个用户点击另一个同时在线的用户的名字时,这两个将被定向到他们自己的"chat.php"。同样,其他用户应该无法查看他们未参与的聊天。我目前正在考虑为这两个用户生成一个独特的页面,例如 "chat.php?user1=Tom&user2=John" 但我应该如何实现呢?我是 PHP 新手。

  3. 如果其他人刚刚发送了一条新消息,我们可以使用 Ajax 以事件驱动的方式来显示新消息吗?还是我们只能使用轮询?我目前正在使用如下轮询,但我觉得轮询并不是很有效:

    // "logs.php" reads chat message from the database 
    setInterval(function(){
        $.get("logs.php", {}, function(resp) {
            // display the response
        });
    }, 1000);  // poll every second
    

感谢您对上述任何问题的任何输入!谢谢。

【问题讨论】:

  • 1) 通常按上次活动的时间socketo.me),你可以使用事件,否则你会被轮询卡住。
  • @JimL 您能否更详细地解释一下如何 1)使用间隔来确定用户“在线”2)创建聊天室并将两个用户“添加”到其中?谢谢
  • 1) 存储用户每次做某事(导航到站点、发送消息等)的时间。如果这不到 5 分钟前,那么您认为用户“活跃”。 2) 创建一个带有自动递增 ID、user_id_1 和 user_id_2 的房间表,创建一个新房间并将两个用户添加到其中。有一个获取房间 ID 的页面,检查用户是否是添加的两个用户 ID 之一,如果是,则显示一些聊天内容。

标签: php ajax


【解决方案1】:

我现在也在做聊天,下面的答案是我所知道的,如果你发现有问题请评论。

回答 1// 使用会话您将无法获取谁已登录和谁未登录,以检查您必须在数据库中设置标志,然后从那里获取除当前会话用户之外的登录用户。

答案 2// 在这里,您混合了不同的聊天概念,即一对一聊天(私人聊天),另一个是群聊。我更喜欢为这两个概念创建不同的聊天文件。 考虑一个场景,你 100 个用户在群组中聊天,你将无法通过 ajax 发送 100 个用户 ID。

答案 3// 长轮询是您可以实现实时聊天更新的方法。但是仍然有很多问题可以在 PHP 中使用长轮询。首先也是最重要的是使用长轮询的主要缺点是当用户增加时它会使用更多资源。

所以,最后尝试使用web socket编程或者使用node.js等不同的框架来实现。

如果您的用户数量较少,那么您绝对可以在 PHP 中使用长轮询。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2011-07-12
    • 2017-09-10
    • 1970-01-01
    • 2011-10-15
    • 2018-07-04
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多