PHP AJAX-聊天功能


PHP AJAX - Chat functionality

我正在使用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//使用会话时,您将无法获取谁登录了,谁没有登录,要进行检查,您必须在数据库中设置标志,然后从中提取当前会话用户之外的登录用户。

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

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

因此,最后尝试使用web套接字编程或使用不同的框架(如node.js)来实现。

如果您的用户数量较少,那么您肯定可以使用PHP进行长轮询。