我正在使用PHP,JavaScript / jQuery和MySQL构建Web应用程序。现在我正在尝试实现一个聊天功能,允许两个在线用户互相聊天(例如,不是一个大聊天室,但只有两个用户之间的私人聊天)。但是,我在实施过程中遇到了以下问题:
如何让一位用户知道其他用户当前是否在线?现在我有一个页面,用户可以在其中看到其他注册用户的名称。我希望区分那些目前登录的人和那些不登录的人。目前,当用户登录时,我将其用户名存储在$_SESSION['name']
中。那么一个用户如何知道是否还设置了另一个用户的$_SESSION['name']
?
如何确保对话对两个用户是私密的?我目前有一个名为"chat.php"
的页面,其中包含聊天界面。当一个用户点击另一个也在线的用户的名字时,这两个用户将被定向到他们自己的"chat.php"
。同样地,其他用户应该无法查看他们没有参与的聊天。我正在考虑为这两个用户生成一个唯一的页面,例如"chat.php?user1=Tom&user2=John"
但是我应该如何实现这一目标呢?我是PHP的新手。
要显示新消息,如果其他人刚刚发送了该消息,我们是否可以使用Ajax以事件驱动的方式执行此操作?或者我们只能使用民意调查吗?我目前正在使用如下的民意调查,但我觉得民意调查不是很有效:
// "logs.php" reads chat message from the database
setInterval(function(){
$.get("logs.php", {}, function(resp) {
// display the response
});
}, 1000); // poll every second
对以上任何问题的任何输入表示赞赏!感谢。
答案 0 :(得分:0)
我目前正在进行聊天,如果您发现错误,请在下面回答我的最佳知识,请对其进行评论。
回答1 // 通过使用会话,您将无法获得登录的人以及谁不能检查您是否必须在数据库中设置标志,并从那里获取当前会话用户以外的登录用户。
回答2 // 在这里,您将混合到不同的聊天概念,即一对一聊天(私人聊天),另一个是群聊。我更喜欢的是为这两个概念创建不同的聊天文件。 考虑这样一种情况,即您在群组中进行100个用户聊天,您将无法通过ajax发送100个用户ID。
回答3 // 长轮询是一种可以实现实时聊天更新的方法。但仍然有很多捕获使用PHP进行长轮询。首先,使用长轮询的主要缺点是当用户增加时使用更多资源。
因此,最后尝试使用Web套接字编程或使用不同的框架(如node.js)来实现。
如果您的用户数量较少,那么您肯定可以使用PHP进行长轮询。