【问题标题】:1-1 Chat system using PHP/MySQL1-1 使用PHP/MySQL的聊天系统
【发布时间】:2012-02-07 01:51:15
【问题描述】:

项目:需要一对一私聊的应用。
当前系统:应用程序中的当前登录系统使用cookie系统让用户保持登录状态。

我了解如何实现聊天系统(我刚刚阅读了关于 Comet 的文章,以后可能会实现它,但现在我打算使用带有计时器的基本 AJAX);聊天期间聊天将存储在 text/xml 文件中,完成后将存档到数据库中。聊天开始时文件名将存储在数据库中,一旦检索到,将存储为 cookie(数据库将保持不变,聊天开始和结束时除外)。

问题:一个用户不能与另一个用户开始对话,除非他们都在线。如何设计系统,以便只有在两个用户都在线时才能开始聊天?
我真的不需要特定的代码,只需要让它工作的逻辑。

【问题讨论】:

  • 用户只会通过点击链接发起聊天..仅向他显示在线人的链接...在数据库中保存用户的状态并通过超时更新您的在线人列表..

标签: php mysql ajax


【解决方案1】:

当用户登录您的站点并停留时,您每 5 秒向服务器发送一次 ajax ping,服务器将更新 ping 的时间。 因此,您可以列出您的在线人员正在查看此时间,如果 ping 时间大于 5 秒,则意味着您的用户已注销或关闭了他们的浏览器。

您还可以使用浏览器焦点事件使用相同的机制来实现离开状态。

【讨论】:

  • 我认为 5 秒可能有点太短了......这可能会导致服务器负载,假设会有很多用户。
【解决方案2】:

对于无状态系统,您可以决定谁在线和不在线的唯一方法是使用超时。您提到使用 AJAX 和计时器,所以如果最后一个用户活动比最后一次 AJAX 刷新(加上刷新时间)更旧,那么它们就不会在线。您需要确保聊天启动页面启动活动更新。

【讨论】:

    【解决方案3】:

    假设您正在记录用户活动:

    仅当接收者在过去 30 秒内显示活动时才允许用户接收聊天。如果没有,则显示用户不在线的错误消息和/或忽略发送的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多